/* * * Copyright (C) 1997 Jayakrishnan Nair jk@csr.uvic.ca * WWW: http://www.csc.uvic.ca/~jk * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Permission to use, copy, modify, and distribute this software and * its documentation for NON-COMMERCIAL or COMMERCIAL purposes and * without fee is hereby granted, provided that any use properly * credits the author, i.e. "SlideProjector courtesy of Jayakrishnan Nair is * displayed. * * ChangeLog * July 20, 1998 * */ import java.applet.Applet; import java.awt.*; import java.util.*; import java.net.*; import java.io.*; public class SlideProjector extends Applet implements Runnable { public static final int NEXT_IMAGE = 1001; public static final int PREV_IMAGE = 1002; public static final int RANDOM_TRANSITION = 1003; public static final int NORMAL_TRANSITION = 1004; ToolBar tb; SilverScreen ss; Label label; int width; int height; Image[] images; Vector imageNames; Vector imageDisplayTitle; int numImages; int curImage; String fontName; String fontSize; int transitionType; String copyRight; String separator; MediaTracker tracker; Thread ssThread; Font f; int delay; public void init() { curImage = -1; imageNames = new Vector(); imageDisplayTitle = new Vector(); String paramString = getParameter("WIDTH"); if(paramString != null) { width = Integer.valueOf(paramString).intValue(); } paramString = getParameter("HEIGHT"); if(paramString != null) { height = Integer.valueOf(paramString).intValue(); } copyRight = getParameter("URL"); separator = getParameter("SEPARATOR"); if(separator == null) separator = "|"; paramString = getParameter("TRANSITION"); if (paramString == null) paramString = "RANDOM"; if (paramString == "RANDOM") transitionType = RANDOM_TRANSITION; else transitionType = NORMAL_TRANSITION; paramString = getParameter("TRANSITIONDELAY"); if (paramString != null) { delay = Integer.valueOf(paramString).intValue(); } else { delay = 10000; } int fh = Integer.parseInt(getParameter("FONTHEIGHT")); int i = fh; while (i > 10) { f = new Font(getParameter("font"), Font.PLAIN, i); FontMetrics fm = getFontMetrics(f); if (fm.getHeight() <= fh) { break; } i--; } // Find out how many images are there try { String tempString; int point; i = 0; while ((paramString = getParameter("SLIDE"+i)) != null) { point = paramString.indexOf(separator); tempString = paramString.substring(0,point); System.out.println("Image Name = "+tempString+" "+ i); this.showStatus("Image Name = "+tempString+" i"); imageNames.addElement(tempString); tempString = paramString.substring(point+1); imageDisplayTitle.addElement(tempString); this.showStatus("Display Name = "+tempString); i++; } } catch(Exception e) { this.showStatus("SlideProjector: Error in SLIDE PARAMETER"); } numImages = imageNames.size(); tracker = new MediaTracker(this); images = new Image[numImages]; String fa = getParameter("RIGHTARROWIMAGE"); if ( fa == null) fa = "forward.gif"; String fb = getParameter("LEFTARROWIMAGE"); if(fb == null) fb = "backward.gif"; String fi = getParameter("TITLEIMAGE"); if(fi == null) fi = "title.gif"; tb = new ToolBar(this,width,fa,fb,fi,50); ss = new SilverScreen(width,height-90,this); label = new Label("Click on right arrow to see next slide",Label.CENTER); label.setFont(f); Border b = new Border(tb,2); b.setLineColor(Color.black); Border screenBorder = new Border(ss,2); screenBorder.setLineColor(Color.black); Border labelBorder = new Border(label,2); labelBorder.setLineColor(Color.black); Panel p = new Panel(); p.setLayout(new BorderLayout(0,0)); p.add("North",screenBorder); p.add("Center",labelBorder); p.add("South",b); add(p); } public void start() { if(ssThread == null) { ssThread = new Thread(this); ssThread.start(); } } public void stop() { if((ssThread != null)&&ssThread.isAlive()) ssThread.stop(); ssThread = null; } public void run() { ssThread.setPriority(Thread.MAX_PRIORITY); for(int i = 0; i < numImages; i++) { String myName = (String)imageNames.elementAt(i); new ImageLoader(this,i,myName); } } public void showNextImage() { curImage = curImage + 1; if (curImage > images.length-1) curImage = 0; // curImage = ++curImage % images.length; // curImage = (curImage < 0) ? -curImage :curImage; showMessage("Next: "+curImage); // ss.clearDisplay(); ss.displayImage(images[curImage]); label.setText((String)imageDisplayTitle.elementAt(curImage)); } public void showPrevImage() { curImage = curImage - 1; if (curImage < 0) curImage = images.length-1; // curImage = (curImage-1) % images.length; // curImage = (curImage < 0) ? -curImage : curImage; showMessage("Prev: "+curImage+"images.length="+images.length); if(!tracker.checkID(curImage,true)) { try { tracker.waitForID(0); } catch(Exception e) { this.showStatus("Error waiting for Image "+curImage); } } // ss.clearDisplay(); ss.displayImage(images[curImage]); label.setText((String)imageDisplayTitle.elementAt(curImage)); } public boolean handleEvent(Event e) { if(e.id == SlideProjector.NEXT_IMAGE) { showNextImage(); return true; } if(e.id == SlideProjector.PREV_IMAGE) { showPrevImage(); return true; } return false; } public void showMessage(String s) { this.showStatus(s); } public void paint(Graphics g) { } public String getAppletInfo() { return "SlideProjector Applet by Jayakrishnan Nair jk@csr.UVic.CA http://csr.csc.UVic.CA/~jk"; } public String[][] getParameterInfo() { String[][] info = { {"WIDTH", "int", "the width of the applet"}, {"HEIGHT", "int", "the height of the applet"}, {"FONT", "String", "a valid Java Font name"}, {"FONTHEIGHT", "int", "size of the font"}, {"LEFTARROWIMAGE","String", "URL of the left arrow in the toolbutton"}, {"RIGHTARROWIMAGE","String", "URL of the right arrow in the toolbutton"}, {"TITLEIMAGE","String","URL of the title image - one which says SlideProjector"}, {"SEPARATOR","String","Separator used the SLIDE parameter"}, {"SLIDE1..N","String", "URL of image title of image"}, }; return info; } int getProjectorWidth() { return width; } int getProjectorHeight() { return height; } int getTransitionType() { return transitionType; } int getDelay() { return delay; } }