/**
* Copyright (c) Lambda Innovation, 2013-2015
* 本作品版权由Lambda Innovation所有。
* http://www.li-dev.cn/
*
* This project is open-source, and it is distributed under
* the terms of GNU General Public License. You can modify
* and distribute freely as long as you follow the license.
* 本项目是一个开源项目,且遵循GNU通用公共授权协议。
* 在遵照该协议的情况下,您可以自由传播和修改。
* http://www.gnu.org/licenses/gpl.html
*/
package cn.liutils.cgui.loader.ui;
import java.util.Map.Entry;
import org.lwjgl.opengl.GL11;
import cn.liutils.cgui.client.CGUILang;
import cn.liutils.cgui.gui.Widget;
import cn.liutils.cgui.gui.component.DrawTexture;
import cn.liutils.cgui.gui.component.Transform;
import cn.liutils.cgui.gui.event.FrameEvent;
import cn.liutils.cgui.gui.event.FrameEvent.FrameEventHandler;
import cn.liutils.cgui.gui.event.LostFocusEvent;
import cn.liutils.cgui.gui.event.LostFocusEvent.LostFocusHandler;
import cn.liutils.cgui.gui.event.MouseDownEvent;
import cn.liutils.cgui.gui.event.MouseDownEvent.MouseDownHandler;
import cn.liutils.cgui.loader.CGUIEditor;
import cn.liutils.util.client.HudUtils;
import cn.liutils.util.helper.Font;
import cn.liutils.util.helper.Font.Align;
/**
* @author WeAthFolD
*
*/
public class Toolbar extends Window {
boolean isLocked = false;
public Toolbar(final GuiEdit guiEdit) {
super(guiEdit, CGUILang.guiToolbar(), false, new double[] { 10, 10 });
transform.setSize(200, 30);
addWidget(new Button(0, "save", CGUILang.butSave()) {
@Override public void triggerEvent() {
if(guiEdit.path != null) {
guiEdit.saveResult();
} else {
guiEdit.getGui().addWidget("SaveAs", new SaveAsScreen(guiEdit));
}
}
});
addWidget(new Button(1, "saveas", CGUILang.butSaveAs()) {
@Override public void triggerEvent() {
guiEdit.getGui().addWidget("SaveAs", new SaveAsScreen(guiEdit));
}
});
addWidget(new Button(2, "add", CGUILang.butAdd()) {
@Override public void triggerEvent() {
isLocked = true;
Widget tl = new TemplateList();
Toolbar.this.addWidget(tl);
getGui().gainFocus(tl);
}
});
addWidget(new Button(3, "hierarchy", CGUILang.butHierarchy()) {
@Override public void triggerEvent() {
if(!getGui().hasWidget("hierarchy")) {
getGui().addWidget("hierarchy", new Hierarchy(gui()));
}
}
});
addWidget(new Button(4, "background", CGUILang.butBackground()) {
@Override public void triggerEvent() {
guiEdit.toggleBlack = !guiEdit.toggleBlack;
}
});
}
class Button extends Widget {
public Button(int i, final String tn, final String name) {
transform.setSize(18, 18).setPos(5 + i * 20, 10);
this.addComponent(new DrawTexture().setTex(GuiEdit.tex("toolbar/" + tn)).setColor4i(127, 190, 255, 255));
regEventHandler(new FrameEventHandler() {
@Override
public void handleEvent(Widget widget, FrameEvent event) {
if(event.hovering && !isLocked) {
GL11.glColor4d(1, 1, 1, .5);
HudUtils.colorRect(0, 0, transform.width, transform.height);
Font.font.draw(name, 9, 19, 10, 0x9fceff, Align.CENTER);
}
}
});
regEventHandler(new MouseDownHandler() {
@Override
public void handleEvent(Widget w, MouseDownEvent event) {
if(!isLocked)
triggerEvent();
}
});
}
public void triggerEvent() {}
}
class TemplateList extends Widget {
public TemplateList() {
transform.x = 30;
transform.y = 30;
final double width = 50, height = 12; //For a single subelement
int i = 0;
for(final Entry<String, Widget> e : CGUIEditor.getTemplates()) {
Widget one = new Widget();
final String name = e.getKey();
one.regEventHandler(new FrameEventHandler() {
@Override
public void handleEvent(Widget w, FrameEvent event) {
GL11.glColor4d(.3, .3, .3, event.hovering ? 0.8 : 0.5);
HudUtils.colorRect(0, 0, w.transform.width, w.transform.height);
Font.font.draw(name, 25, 1.5, 10, 0x98b8e2, Align.CENTER);
}
});
one.regEventHandler(new MouseDownHandler() {
@Override
public void handleEvent(Widget w, MouseDownEvent event) {
isLocked = false;
TemplateList.this.dispose();
gui().toEdit.addWidget(CGUIEditor.createFromTemplate(name));
}
});
Transform ot = one.transform;
ot.x = 0;
ot.y = (i++) * height;
ot.width = width;
ot.height = height;
addWidget(one);
}
regEventHandler(new LostFocusHandler() {
@Override
public void handleEvent(Widget w, LostFocusEvent event) {
isLocked = false;
w.dispose();
}
});
}
}
}