import java.awt.*;
import java.awt.event.*;
import java.io.*;

/** Der Inhalt einer Textdatei wird in einem Fenster angezeigt, welches diese Klasse produziert */

public class FileViewer extends CloseableFrame  {

String directory;    // Das Default-Verzeichnis, das im Datei-Dialog angezeigt wird.
TextArea textarea; // Die Textarea in der der Dateiinhalt angezeigt wird.

/**Sekundärer-Konstruktor: Dateibetrachter 
* fängt mit leerem Fenster an */
public FileViewer(){this(null, null);}  // leeres Fenster

/** Sekundärer-Konstruktor: */
public FileViewer(String filename){this(null, filename);}

/** Haupt-Konstruktor:
 *  erzeugt ein FileViewer Objekt indem die ausgewählte Datei angezeigt wird
 */
public FileViewer(String directory, String filename){

	super(); // schliessbaren Frame erzeugen	
 
	// TextArea erzeugen, in der der Dateiinhalt angezeigt wird
	textarea = new TextArea(" ", 24, 80);
	textarea.setFont(new Font("MonoSpaced", Font.PLAIN, 12));
	textarea.setEditable(false);
	this.add("Center", textarea);
	
	// Panel am unteren Rand erzeugen, das einige Buttons enthält
	Panel p = new Panel();
	p.setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 5));
	this.add(p, "South");
	
	// Menüleiste erzeugen mit allen Befehlen
	MeinMenu menu = new MeinMenu();
	menu.addAllMenu();
	this.setMenuBar(menu);
	
	/** Diese Methode wird aufgerufen, um die Größe des Fensters an den zur Darstellung 
	 *  der Dialogelemente erforderlichen Platz anzupassen.
	 */
	this.pack(); 
	
	if(directory == null){
	  File f ;
	  
	  // Verzeichnis aus dem Dateinamen oder das aktuelle Verzeichnis
	  // ermitteln, sofern notwendig
	  if((filename != null) && (f = new File(filename)).isAbsolute()){
	   directory = f.getParent();
	   filename  = f.getName();	   	  
	  }
	  else directory = System.getProperty("user.dir");  
	}
	
	this.directory = directory;
	setFile(directory, filename);
}

	/** 
	 * Angegebene Datei (sofern vorhanden) anzeigen und laden
	 */

	public void setFile(String directory, String filename){
	  if((filename == null) || (filename.length() == 0)) return;
	  File f;
	  FileReader in = null;
	  // wegen Textdatei benutzt man FileReader anstatt FileInputStream
	  
	  try {
	   f = new File(directory, filename);
	   in = new FileReader(f);
	   int size = (int) f.length();
	   char[] data = new char[size];
	   int chars_read = 0;
	  
	    while(chars_read < size)chars_read += in.read(data, chars_read, size - chars_read);
	  
	   textarea.setText(new String(data));
	   this.setTitle("FileViewer: " + filename + ": I/O-Ausnahme");  	
	   
	   } // try
	  
	   // Meldungen anzeigen, wenn etwas schiefgeht 	
	  catch(IOException e){
		  textarea.setText(e.getClass().getName() + ": " + e.getMessage());
		  this.setTitle("FileViewer: " + filename + ": I/O-Ausnahme");		  
	  }
	  finally {try { if(in != null) in.close();} catch (IOException e){}}
	
	
		
	} // setFile
	
	/**
	 * Button - Klicks verarbeiten
	 */
	
	
	
	
	
}