All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.darwinsys.preso.OLSS Maven / Gradle / Ivy

package com.darwinsys.preso;

import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

/** 
 * OLSS - the one, true, One Line Slide Show presenter: one line per slide, generates
 * HTML, shows in a JFrame
 * XXX Allow to save the HTML so you can use your browser...
 */
public class OLSS {
	JFrame jf;
	JLabel tf;
	
	int DEFAULT_SIZE = 72;

	/**
	 * Main driver program
	 * @param args The args
	 */
	public static void main(String[] args) {
		OLSS driver = new OLSS();
		if (args.length != 1) {
			JOptionPane.showMessageDialog(null, "Usage: OLSS script", "Error",
					JOptionPane.ERROR_MESSAGE);
			return;
		}
		driver.loadShow(args[0]);
		driver.runShow();
	}

	private List show = new ArrayList();
	private boolean ignoreLinks;

	private static Pattern urlPattern = 
		Pattern.compile("http://([a-z.])+(/[\\w\\d.]+)+");

	/**
	 * Load the show
	 * @param fileName The input
	 */
	public void loadShow(String fileName) {
		try (BufferedReader is = new BufferedReader(new FileReader(fileName))) {
			loadShow(is);
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

	/**
	 * Load the show
	 * @param is The input
	 */
	public void loadShow(BufferedReader is) {
		try {
			String line;
			while ((line = is.readLine()) != null) {
				if (line.length() == 0 || line.startsWith("#"))
					continue;
				if (!ignoreLinks) {
					final Matcher matcher = urlPattern.matcher(line);
					if (matcher.find()) {
						String url = matcher.group(0);
						line += "";
						System.out.println(line);
					}
				}
				show.add(line);
			}
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}
	
	public List getShow() {
		return show;
	}

	public void quit() {
		System.exit(0);
	}
	
	public void runShow() {
		System.out.println("There are " + show.size() + " slides");
		if (jf == null) {
			jf = new JFrame();
			jf.setSize(Toolkit.getDefaultToolkit().getScreenSize());
			jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		}
		if (tf == null) {
			tf = new JLabel();
			tf.setHorizontalAlignment(JLabel.CENTER);
			tf.setFont(new Font("Serif", Font.BOLD, DEFAULT_SIZE));
		}
		showPage(0);
		jf.setContentPane(tf);
		jf.addKeyListener(new KeyListener() {

			public void keyPressed(KeyEvent e) {
				// Auto-generated method stub				
			}

			public void keyReleased(KeyEvent e) {
				// Auto-generated method stub	
			}

			public void keyTyped(KeyEvent e) {
				final char keyChar = e.getKeyChar();
				switch (keyChar) {
				case '+':
				case ' ':
				case '>':
				case 'j':
					forward();
					break;
				case '-':
				case '<':
				case 'k':
					back();
					break;
				case 'q':
					quit();
				default:
					System.out.printf("Unknown keyChar %c %d%n", keyChar, (int)keyChar);
				}
			}
			
		});
	}

	private void forward() {
		page = Math.min(page+1, show.size() - 1);
		showPage(page);
	}
	private void back() {
		page = Math.max(page-1, 0);
		showPage(page);
	}
	int page = 0;
	
	private void showPage(int n) {
		tf.setText("" + show.get(n));
		jf.setVisible(true);
		page = n;
	}


}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy