package com.idega.presentation;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import com.idega.core.file.data.ICFile;
import com.idega.core.file.data.ICFileHome;
import com.idega.idegaweb.IWBundle;
import com.idega.idegaweb.IWUserContext;
import com.idega.presentation.text.Link;
import com.idega.presentation.ui.SubmitButton;
public class ImageSlideShow extends Block
{
private static final String IMAGE_SLIDE_SHOW = "image_slide_show";
public static int TOP = 1;
public static int BOTTOM = 2;
public static int OUTER = 4;
public static int INNER = 8;
private ICFile fileFolder;
private List listOfFiles = null;
private int width;
private int height;
private int buttonAlign = BOTTOM + OUTER;
private int fileId = -1;
private int delay = 0;
private String alt;
private boolean useJavascript = true;
private boolean showButtons = true;
private PresentationObject leftObject, rightObject;
public void main(IWContext iwc)
{
IWBundle iwb = getBundle(iwc);
if (this.leftObject == null) {
this.leftObject = iwb.getImage("arrowleft.gif");
}
if (this.rightObject == null) {
this.rightObject = iwb.getImage("arrowright.gif");
}
if (this.fileFolder == null && this.fileId > 1)
{
try
{
ICFileHome fileHome = (ICFileHome) com.idega.data.IDOLookup.getHome(ICFile.class);
this.fileFolder = fileHome.findByPrimaryKey(new Integer(this.fileId));
}
catch (Exception ex)
{
}
}
else if (this.listOfFiles != null && !this.listOfFiles.isEmpty())
{
this.fileFolder = (ICFile) this.listOfFiles.get(0);
}
if (this.fileFolder != null)
{
Table T = new Table(2, 2);
String name = "";
Vector urls = new Vector();
ICFile fileImage = null;
int buttonRow = 2;
int imageRow = 1;
if ((this.buttonAlign & TOP) != 0)
{
imageRow = 2;
buttonRow = 1;
}
// iterator init
Iterator iter = null;
int size = 1;
int folderSize = this.fileFolder.getChildCount();
if (this.fileFolder.getChildCount() > 0 && this.fileFolder.getChildrenIterator() != null)
{
iter = this.fileFolder.getChildrenIterator();
size += folderSize;
}
else if (this.listOfFiles != null)
{
iter = this.listOfFiles.iterator();
size = this.listOfFiles.size();
}
// iterator work
Image image = new Image();
name = "p_" + this.fileFolder.getPrimaryKey().toString();
try
{
if (!this.fileFolder.isFolder())
{
fileImage = this.fileFolder;
}
else if (iter != null && iter.hasNext())
{
fileImage = (ICFile) iter.next();
}
if (fileImage != null)
{
image = new Image(fileImage);
if (image != null)
{
if (this.width > 0) {
image.setWidth(this.width);
}
if (this.height > 0) {
image.setHeight(this.height);
}
if (this.alt != null) {
image.setAlt(this.alt);
}
}
try
{
String url = getICFileSystem(iwc).getFileURI(fileImage);
urls.add(url);
}
catch (Exception e)
{
e.printStackTrace();
}
image.setName(name);
T.add(image, 1, imageRow);
}
}
catch (SQLException sql)
{
}
if (iter != null && iter.hasNext())
{
while (iter.hasNext())
{
fileImage = (ICFile) iter.next();
try
{
String url = getICFileSystem(iwc).getFileURI(fileImage);
if (!urls.contains(url)) {
urls.add(url);
}
}
catch (Exception ex)
{
ex.printStackTrace(System.err);
}
}
// layout
T.mergeCells(1, imageRow, 2, imageRow);
if (size > 1)
{
if (getParentPage() != null) {
getParentPage().getAssociatedScript().addFunction("slide" + name, getSlideScript(name, urls));
}
if (this.showButtons)
{
T.add(getLeftLink(name), 1, buttonRow);
T.add(getRightLink(name), 2, buttonRow);
//T.add(getLeftButton(name),1,buttonRow);
//T.add(getRightButton(name),2,buttonRow);
if ((this.buttonAlign & INNER) != 0)
{
T.setAlignment(1, buttonRow, "right");
T.setAlignment(2, buttonRow, "left");
}
else if ((this.buttonAlign & OUTER) != 0)
{
T.setAlignment(1, buttonRow, "left");
T.setAlignment(2, buttonRow, "right");
}
}
}
else {
T.mergeCells(1, 2, 2, 2);
}
T.setCellpadding(0);
T.setCellspacing(0);
}
else {
T.mergeCells(1, 2, 2, 2);
}
add(T);
if (this.delay > 0) {
add(getDelayScript(name));
}
}
}
private Link getLeftLink(String imageName)
{
return getLink(imageName, -1, this.leftObject);
}
private Link getRightLink(String imageName)
{
return getLink(imageName, 1, this.rightObject);
}
private SubmitButton getLeftButton(String imageName)
{
return getButton(imageName, -1, (Image) this.leftObject);
}
private SubmitButton getRightButton(String imageName)
{
return getButton(imageName, 1, (Image) this.rightObject);
}
private SubmitButton getButton(String imageName, int step, Image object)
{
SubmitButton button = new SubmitButton(object);
button.setOnClick(getCallingScript(imageName, step));
return button;
}
private Link getLink(String imageName, int step, PresentationObject object)
{
Link link = new Link(object);
link.setURL("#");
link.setOnClick(getCallingScript(imageName, step));
return link;
}
public void setFileFolder(ICFile imagefile)
{
this.fileFolder = imagefile;
}
public void setFileId(int iImageFileId)
{
this.fileId = iImageFileId;
}
public void setFiles(List listOfImageFiles)
{
this.listOfFiles = listOfImageFiles;
}
public void setDelay(int seconds)
{
if (seconds > 0) {
this.delay = 1000 * seconds;
}
}
public void setWidth(String width)
{
this.width = Integer.parseInt(width);
}
public void setWidth(int width)
{
this.width = width;
}
public void setHeight(String height)
{
this.height = Integer.parseInt(height);
}
public void setHeight(int height)
{
this.width = height;
}
public void setAlt(String alt)
{
this.alt = alt;
}
public void setLeftImage(Image leftImage)
{
this.leftObject = leftImage;
}
public void setRightImage(Image rightImage)
{
this.rightObject = rightImage;
}
public void setShowButtons(boolean showButtons)
{
this.showButtons = showButtons;
}
public void setButtonsInnerAlignment(boolean innerAlign)
{
if (innerAlign) {
this.buttonAlign |= INNER;
}
else {
setButtonsOuterAlignment(true);
}
}
public void setButtonsOuterAlignment(boolean outerAlign)
{
if (outerAlign)
{
this.buttonAlign |= OUTER;
}
else {
setButtonsInnerAlignment(true);
}
}
public void setButtonsTopAlignment(boolean topAlign)
{
if (topAlign) {
this.buttonAlign |= TOP;
}
else {
setButtonsBottomAlignment(true);
}
}
public void setButtonsBottomAlignment(boolean bottomAlign)
{
if (bottomAlign) {
this.buttonAlign |= TOP;
}
else {
setButtonsTopAlignment(true);
}
}
private String getCallingScript(String name, int step)
{
return "javascript:slide_" + name + "('" + step + "');";
}
private Script getDelayScript(String name)
{
StringBuffer addPics = new StringBuffer();
addPics.append("setInterval('").append(getCallingScript(name, 1)).append("',").append(this.delay).append(");");
Script s = new Script();
s.addFunction(name + "load", addPics.toString());
return s;
}
private String getSlideScript(String name, List urls)
{
String sCurrent = "current_" + name;
String sPicArray = "picsources" + name;
String sPreloadArray = "picPreload" + name;
String sSlide = "slide_" + name;
StringBuffer addPics = new StringBuffer();
//addPics.append("var ").append(sDelay).append(" = 0;\n");
addPics.append("var ").append(sCurrent).append(" = ").append(this.delay).append(";\n");
addPics.append("var ").append(sPicArray).append(" = new Array(");
int size = urls.size();
for (int i = 0; i < size; i++)
{
String url = (String) urls.get(i);
//if not last one
if(i!=(size-1) ){
addPics.append("\"").append(url).append("\",");
}
else{
addPics.append("\"").append(url).append("\");\n");
}
}
addPics.append("var ").append(sPreloadArray).append(" = new Array();\n")
.append("for (i=0;i<").append(sPicArray).append(".length;i++){\n")
.append("\t").append(sPreloadArray).append("[i]=new Image();\n")
.append("\t").append(sPreloadArray).append("[i].src=").append(sPicArray).append("[i];\n}\n");
addPics.append("function ").append(sSlide).append("(val) {\n\t")
.append(sCurrent).append(" =").append(sCurrent).append("+parseInt(val);\n")
.append("\t").append("if(").append(sCurrent).append(">=").append(sPicArray).append(".length){\n")
.append("\t").append(sCurrent).append("=0;\n\t}")
.append("else if(").append(sCurrent).append("<").append("0){\n")
.append("\t\t").append(sCurrent).append("=").append(sPicArray).append(".length-1;\n\t}\n");
addPics.append("\tdocument.images.").append(name).append(".src = ");
addPics.append(sPreloadArray).append("[").append(sCurrent).append("].src;\n");
addPics.append("}\n");
return addPics.toString();
}
public Object clonePermissionChecked(IWUserContext iwc)
{
ImageSlideShow obj = null;
try
{
obj = (ImageSlideShow) super.clone();
}
catch (Exception ex)
{
}
return obj;
}
} // class ImageRotater