package wicket.contrib.eudock; import java.util.ArrayList; import java.util.List; import wicket.Component; import wicket.RequestCycle; import wicket.ResourceReference; import wicket.Response; import wicket.behavior.AbstractBehavior; import wicket.markup.html.IHeaderResponse; import wicket.markup.html.link.Link; import wicket.markup.html.resources.CompressedResourceReference; import wicket.util.string.JavascriptUtils; public class EUDock extends AbstractBehavior { private static final long serialVersionUID = 1L; private static final CompressedResourceReference EUJS = new CompressedResourceReference("contrib/eudock/euDock.2.0.js"); private static final CompressedResourceReference EUIMGJS = new CompressedResourceReference("contrib/eudock/euDock.Image.js"); private static final CompressedResourceReference EULABELJS = new CompressedResourceReference("contrib/eudock/euDock.Label.js"); private static final ResourceReference DOCKBGL = new ResourceReference("contrib/eudock/images/dockBg-l.png"); private static final ResourceReference DOCKBGC = new ResourceReference("contrib/eudock/images/dockBg-c-o.gif"); private static final ResourceReference DOCKBGR = new ResourceReference("contrib/eudock/images/dockBg-r.png"); private static final ResourceReference DOCKBGV = new ResourceReference("contrib/eudock/images/dockBg-c-v.gif"); private static final ResourceReference DOCKBGT = new ResourceReference("contrib/eudock/images/dockBg-u.png"); private static final ResourceReference CUBE = new ResourceReference("contrib/eudock/images/cube.png"); private static final ResourceReference IMGPATH = new ResourceReference("contrib/eudock"); private int iconsOffset = 2; private List iconlist = new ArrayList(); public class Icon { private String icon; private String link; private String text; private String style = "background:#eeefff;border-style:solid;border-color:#9Fb6b6;border-width:3px;"; private int offsetX = 0; private int offsetY = -120; public Icon(String icon,String link,String text,String style) { this.icon = icon; this.link = link; this.text = text; this.style = style; } public Icon(String icon,String link,String text) { this.icon = icon; this.link = link; this.text = text; } public Icon(String icon,String link) { this.icon = icon; this.link = link; } public Icon(String link) { this.link = link; } public void setIcon(String icon) { this.icon = icon; } public String getIcon() { return icon; } public void setLink(String link) { this.link = link; } public String getLink() { return link; } public void setText(String text) { this.text = text; } public String getText() { return text; } public void setStyle(String style) { this.style = style; } public String getStyle() { return style; } public void setOffsetX(int offsetX) { this.offsetX = offsetX; } public int getOffsetX() { return offsetX; } public void setOffsetY(int offsetY) { this.offsetY = offsetY; } public int getOffsetY() { return offsetY; } } public EUDock() { } public void renderHead(IHeaderResponse response) { response.renderJavascriptReference(EUJS); response.renderJavascriptReference(EUIMGJS); response.renderJavascriptReference(EULABELJS); } public void addIcon(String iconImage,String link,String text) { if(link == null) return; iconlist.add(new Icon(iconImage,link,text)); } public void addIcon(String iconImage,String link,String text,String style) { if(link == null) return; iconlist.add(new Icon(iconImage,link,text,style)); } public void addIcon(String iconImage,String link) { if(link == null) return; iconlist.add(new Icon(iconImage,link)); } public void addIcon(String link) { if(link == null) return; iconlist.add(new Icon(link)); } public void addIcon(Icon icon) { iconlist.add(icon); } private String fading = ABSOLUTE; private String alignment = DOWN; private int alignmentoffset = 0; public final static String DOWN = "euDOWN"; public final static String LEFT = "euLEFT"; public final static String RIGHT = "euRIGHT"; public final static String UP = "euUP"; public final static String ABSOLUTE = "euABSOLUTE"; public final static String RELATIVE = "euRELATIVE"; public void onRendered(Component component) { Response res = component.getResponse(); final String id = component.getMarkupId(); final String dock = "dock"+id; res.write(JavascriptUtils.SCRIPT_OPEN_TAG); res.write("euEnv.imageBasePath='"+getResourceUrl(IMGPATH)+"';\n"); res.write("var "+dock+" = new euDock();\n"); res.write(dock+".setBar({\n"); res.write("left: {euImage:{image:'"+getResourceUrl(DOCKBGL)+"'}},\n"); res.write("horizontal: {euImage:{image:'"+getResourceUrl(DOCKBGC)+"'}},\n"); res.write("top: {euImage:{image:'"+getResourceUrl(DOCKBGT)+"'}},\n"); res.write("vertical: {euImage:{image:'"+getResourceUrl(DOCKBGV)+"'}},\n"); res.write("right: {euImage:{image:'"+getResourceUrl(DOCKBGR)+"'}}\n"); res.write("});\n"); res.write(dock+".setIconsOffset("+getIconsOffset()+");\n"); res.write(dock+".setAnimation(euMOUSE,0.3);\n"); res.write(dock+".setScreenAlign("+alignment+","+alignmentoffset+");\n"); res.write(dock+".animFading = "+fading+";\n"); for(Icon icon : iconlist) { if(icon.getIcon() == null) icon.setIcon(getResourceUrl(CUBE)); res.write(dock+".addIcon(new Array({euImage:{image:'"+icon.getIcon()+"'}},{euLabel:{ object:{euImage:{image:'"+icon.getIcon()+"'}},"); if(icon.getText() != null) res.write("txt:'"+icon.getText()+"',style: '"+icon.getStyle()+"',"); else res.write("txt: '',style: '',"); res.write("anchor: "+alignment+ ",offsetX: "+icon.getOffsetX()+",offsetY:"+icon.getOffsetY()+"}}),{" + "link:'"+icon.getLink()+"'});\n"); } res.write(JavascriptUtils.SCRIPT_CLOSE_TAG); } private String getResourceUrl(ResourceReference ref) { return (String)RequestCycle.get().urlFor(ref); } public void setIconsOffset(int iconsOffset) { this.iconsOffset = iconsOffset; } public int getIconsOffset() { return iconsOffset; } public void setAnimationFading(String str) { this.fading = str; } public void setAlignment(String alignment, int offset ) { this.alignment = alignment; this.alignmentoffset = offset; } }