package cn.liutils.cgui.loader.ui; import java.io.File; import java.io.FileOutputStream; import javax.vecmath.Vector2d; import net.minecraft.client.Minecraft; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.config.Configuration; import org.lwjgl.opengl.GL11; import cn.annoreg.core.Registrant; import cn.liutils.cgui.client.CGUILang; import cn.liutils.cgui.gui.LIGui; import cn.liutils.cgui.gui.LIGuiScreen; import cn.liutils.cgui.gui.Widget; import cn.liutils.cgui.loader.xml.CGUIDocWriter; /** * @author WeAthFolD */ @Registrant public class GuiEdit extends LIGuiScreen { static final String CONFIG_PATH = "config/cgui_layout.conf"; public Configuration cfg; LIGui toEdit = new LIGuiPlayground(this); //The edit playground gui! private Widget selectedEditor; public boolean toggleBlack = true; public static double COLOR[] = { 0.2, 0.4, 0.65, .9 }; String path; public GuiEdit(String _path, LIGui gui) { this(); toEdit.addAll(gui); path = _path; this.drawBack = false; } public static double[] COLOR_STYLE = new double[] { .3, .56, 1 }; public static void bindColor(int n) { double c = COLOR[n]; GL11.glColor4d(c * COLOR_STYLE[0], c * COLOR_STYLE[1], c * COLOR_STYLE[2], 0.7); } public void disposeSelectedEditor() { if(selectedEditor != null) { selectedEditor.dispose(); } } public void changeSelectedEditor(Widget w) { disposeSelectedEditor(); selectedEditor = w; getGui().addWidget(selectedEditor); } public GuiEdit() { this.drawBack = false; File f = new File(CONFIG_PATH); if(!f.isFile()) { if(f.isDirectory()) { f.delete(); } try { FileOutputStream fos = new FileOutputStream(f); fos.close(); } catch(Exception e) {} } cfg = new Configuration(f); gui.addWidget("toolbar", new Toolbar(this)); gui.addWidget("hierarchy", new Hierarchy(this)); } public Vector2d getDefaultPosition(String name, double[] def) { double[] r = cfg.get("layout", name, def).getDoubleList(); return new Vector2d(r); } public void updateDefaultPosition(String name, double x, double y) { cfg.get("layout", name, new double[] { x, y }).set(new double[] { x, y }); } @Override public void drawScreen(int mx, int my, float w) { if(toggleBlack) LIGui.drawBlackout(); toEdit.resize(width, height); toEdit.draw(mx, my); super.drawScreen(mx, my, w); } @Override protected void mouseClicked(int mx, int my, int btn) { if(!gui.mouseClicked(mx, my, btn)) { //Fallthrough only if edit gui wasn't interrupting. //toEdit.mouseClicked(mx, my, btn); } } @Override protected void mouseClickMove(int mx, int my, int btn, long time) { if(!gui.mouseClickMove(mx, my, btn, time)) { toEdit.mouseClickMove(mx, my, btn, time); } } @Override public void onGuiClosed() { super.onGuiClosed(); cfg.save(); saveResult("autosave"); } public void saveResult() { if(path == null) throw new IllegalStateException("Null path!"); File file; file = new File(path); if(file.isFile()) file.delete(); boolean res = CGUIDocWriter.save(toEdit, file); Minecraft.getMinecraft().thePlayer.sendChatMessage(res ? CGUILang.commSaved() + file.getName() : CGUILang.commSaveFailed() + file.getName()); } private void saveResult(String name) { File file; file = new File("cgui/"); if(file.isFile()) file.delete(); if(!file.isDirectory()) file.mkdirs(); int i = 0; do { file = new File("cgui/" + name + (i++) + ".xml"); } while(file.canRead() || file.isDirectory()); if(CGUIDocWriter.save(toEdit, file)) Minecraft.getMinecraft().thePlayer.sendChatMessage(CGUILang.commSaved() + file.getName()); else Minecraft.getMinecraft().thePlayer.sendChatMessage(CGUILang.commSaveFailed() + file.getName()); } public boolean doesGuiPauseGame() { return false; } public static final ResourceLocation tex(String name) { return new ResourceLocation("liutils:textures/cgui/" + name + ".png"); } }