import PositionLayout;
import documentDataStructures.*;
import java.awt.*;
import java.io.*;
// Dies ist die Hauptklasse
public class WebLSD extends Frame {
static Setup setup;
//Klassenvariable, die die offenen Fenster mitzaehlt
static int anzahlOffeneFenster = 0;
// Festlegen der min/max Fenstergroesse
final int maxStartFensterGroesse = 750;
final int minStartFensterGroesse = 500;
int startFensterGroesse;
// Menueleiste instanziieren
static MenuBar menuBar;
Menu m_Datei, m_Bearbeiten, m_Hilfe;
MenuItem m_Datei_Aktualisieren, m_Datei_Schliessen,
m_Datei_Beenden,m_Datei_NeuesFenster,
m_Bearbeiten_SetupBearbeiten, m_Bearbeiten_SetupLaden,
m_Bearbeiten_StrukturTesten,
m_Hilfe_ueber, m_Hilfe_Info;
// Hauptpanel, enthaelt alles andere
Panel topPanel;
// Panel fuer die untere Leiste
Panel subPanel;
//Laufleisten
Scrollbar V_Scrollbar;
Scrollbar H_Scrollbar;
LinkStructure linkStruktur;
// die Arbeitsflaeche instanziieren
Arbeitsflaeche arbeitsflaeche;
// Konstruktor der Klasse
public WebLSD(LinkStructure linkStruktur) {
//Aufruf des Superklassenkonstruktors
super("WebLSD: "+linkStruktur.dokumentListe[linkStruktur.startDokument].name());
// Klassenweiter zugriff auf die darzustellende Link Struktur
this.linkStruktur = linkStruktur;
// jetzt exitstiert ein Fenster mehr
anzahlOffeneFenster++;
// Layout des Fensters festlegen
setLayout(new BorderLayout(10,10));
// Menueleiste erstellen
menuBar = new MenuBar();
// erstes Menu (Datei) mit Items in Menu Bar einfuegen
m_Datei = new Menu("Datei");
menuBar.add(m_Datei);
m_Datei_Aktualisieren = new MenuItem("Aktualisieren");
m_Datei.add(m_Datei_Aktualisieren);
m_Datei_NeuesFenster = new MenuItem("Neues Fenster");
m_Datei.add(m_Datei_NeuesFenster);
m_Datei.add(new MenuItem("-"));
m_Datei_Schliessen = new MenuItem("Schliessen");
m_Datei.add(m_Datei_Schliessen);
m_Datei_Beenden = new MenuItem("Beenden");
m_Datei.add(m_Datei_Beenden);
// zweites Menu (Bearbeiten) mit Items in Menu Bar einfuegen
m_Bearbeiten = new Menu("Bearbeiten");
menuBar.add(m_Bearbeiten);
m_Bearbeiten_SetupLaden = new MenuItem("Setup Laden ...");
m_Bearbeiten.add(m_Bearbeiten_SetupLaden);
m_Bearbeiten_SetupBearbeiten = new MenuItem("Setup Bearbeiten ...");
m_Bearbeiten.add(m_Bearbeiten_SetupBearbeiten);
m_Bearbeiten.add(new MenuItem("-"));
m_Bearbeiten_StrukturTesten = new MenuItem("Struktur testen ...");
m_Bearbeiten.add(m_Bearbeiten_StrukturTesten);
// Hilfe Menu erstellen
m_Hilfe = new Menu("Hilfe");
menuBar.add(m_Hilfe);
m_Hilfe_ueber = new MenuItem("Ueber ...");
m_Hilfe.add(m_Hilfe_ueber);
m_Hilfe.add(new MenuItem("-"));
m_Hilfe_Info = new MenuItem("Informationen");
m_Hilfe.add(m_Hilfe_Info);
// dieses Menu als Hilfemenu definieren
menuBar.setHelpMenu(m_Hilfe);
// Menueleiste einfuegen
this.setMenuBar(menuBar);
// einstellen der richtigen Bildschirmdimensionen
//wird das Fenster zu gross
if (linkStruktur.maxRadius > maxStartFensterGroesse) {
// dann entsprechend verkleinern
startFensterGroesse = maxStartFensterGroesse;
}
// oder zu klein
else if (linkStruktur.maxRadius < minStartFensterGroesse) {
// dann entsprechend vergroessern
startFensterGroesse = minStartFensterGroesse;
}
else {
// ansonsten bei der optimalen Groesse belassen
startFensterGroesse = linkStruktur.maxRadius;
}
// Laufleisten entsprechend Fenstergroesse und Arbeitsflaeche.infoSize
//initialisieren
// (Richtung,aktuelle Position, Ausschnittgroesse, min,max des Scrollbars)
V_Scrollbar = new Scrollbar(Scrollbar.VERTICAL,
linkStruktur.maxRadius/2 -Arbeitsflaeche.infoSize,
startFensterGroesse,
1 - Arbeitsflaeche.infoSize,
linkStruktur.maxRadius -Arbeitsflaeche.infoSize);
H_Scrollbar = new Scrollbar(Scrollbar.HORIZONTAL,
linkStruktur.maxRadius/2,
startFensterGroesse,
1,linkStruktur.maxRadius);
// initialisieren der Arbeitsflaeche
arbeitsflaeche = new Arbeitsflaeche(new Dimension(startFensterGroesse,
startFensterGroesse+Arbeitsflaeche.infoSize),
linkStruktur,
new Point(linkStruktur.maxRadius/2,
linkStruktur.maxRadius/2 -
Arbeitsflaeche.infoSize));
// topPanel Panel initialisieren
topPanel = new Panel();
topPanel.setLayout(new BorderLayout(5,5));
// SubPanel initialisieren
subPanel = new Panel();
subPanel.setLayout(new BorderLayout());
//Layout des Subpanels erstellen: Label und Laufleiste
subPanel.add("West",new Label(" WebLSD: WebLinkStructureDisplay "));
subPanel.add("Center",H_Scrollbar);
//Layout des topPanels erstellen: Laufleisten, Arbeitsflaeche und das Subpanel
topPanel.add("Center",arbeitsflaeche);
topPanel.add("East",V_Scrollbar);
topPanel.add("South",subPanel);
// fenster am Bildschirm erzeugen
add("Center",topPanel);
pack();
show();
}
public boolean handleEvent(Event evt) {
//DialogFenster instanziieren
InfoFenster infoFenster;
FileDialog setup_LadenFenster;
switch (evt.id) {
case Event.SCROLL_LINE_UP:
case Event.SCROLL_LINE_DOWN:
case Event.SCROLL_PAGE_UP:
case Event.SCROLL_PAGE_DOWN:
case Event.SCROLL_ABSOLUTE:
if (evt.target == V_Scrollbar) {
arbeitsflaeche.ty = ((Integer)evt.arg).intValue();
arbeitsflaeche.repaint();
}
if (evt.target == H_Scrollbar) {
arbeitsflaeche.tx = ((Integer)evt.arg).intValue();
arbeitsflaeche.repaint();
}
break;
case Event.ACTION_EVENT:
if (evt.target instanceof MenuItem) {
// kann direkt auf == abgefragt werden, da identische Variable
if (evt.target == m_Datei_Aktualisieren) {
arbeitsflaeche.hide();
new WebLSD(new LinkStructure(setup.log, setup.logFiles));
this.hide();
this.dispose();
}
if (evt.target == m_Datei_NeuesFenster) {
new WebLSD(linkStruktur);
}
if (evt.target == m_Datei_Schliessen) {
if (anzahlOffeneFenster-- > 1) this.hide();
else System.exit(0);
}
if (evt.target == m_Datei_Beenden) System.exit(0);
if (evt.target == m_Bearbeiten_SetupLaden) {
setup_LadenFenster =
new FileDialog (this,
"Setup Laden ...",
FileDialog.LOAD);
setup_LadenFenster.show();
String dateiName = setup_LadenFenster.getDirectory()
+ setup_LadenFenster.getFile();
if (!dateiName.equals("nullnull")) {
setup.load(dateiName);
setup = new Setup(this, "SetupBearbeiten ...", true);
setup.pack();
setup.show();
}
arbeitsflaeche.repaint();
}
if (evt.target == m_Bearbeiten_SetupBearbeiten) {
setup = new Setup(this, "Setup Bearbeiten ...", true);
setup.pack();
setup.show();
}
if (evt.target == m_Bearbeiten_StrukturTesten) {
(new ExternalProgram(this, setup.progName)).start();
}
if (evt.target == m_Hilfe_ueber) {
String[] anzeige = new String[6];
anzeige[0] = "Technische Universitaet Muenchen";
anzeige[1] = " Institut fuer Informatik ";
anzeige[2] = " ";
anzeige[3] = "WebLinkStructureDisplay";
anzeige[4] = "implementiert von Diana Stricker und Albert Euba";
anzeige[5] = "Fragen an: euba@informatik.tu-muenchen.de";
infoFenster = new InfoFenster(this,
"Hilfe Ueber ...",
true,
anzeige);
}
if (evt.target == m_Hilfe_Info) {
String[] anzeige = new String[1];
anzeige[0] = "Text folgt nach Erstellung der Ausarbeitung";
infoFenster = new InfoFenster(this, "Informationen",
true, anzeige);
}
}
break;
}
return super.handleEvent(evt);
}
public static void main (String args[]) {
// Standardsetup Laden
setup = new Setup(new Frame(),"",true);
setup.load("WebLSD.ini");
new WebLSD(new LinkStructure(setup.log, setup.logFiles));
}
}
// Diese Klasse startet einen LinkTest in eigenem Prozess
class ExternalProgram extends Thread {
String befehl;
WebLSD aufrufer;
String[] anzeige = new String[1];
public ExternalProgram(WebLSD aufrufer, String befehl) {
super(befehl);
this.befehl = befehl;
this.aufrufer = aufrufer;
}
public ExternalProgram(String befehl) {
super(befehl);
this.befehl = befehl;
this.aufrufer = null;
}
public void run() {
try {
Process prozess = Runtime.getRuntime().exec(befehl);
//Wenn stdout erfolgen soll, dann auskommentieren
// InputStream iss = prozess.getInputStream();
// DataInputStream input =new DataInputStream(iss);
// String instring;
//
// while ((instring = input.readLine()) != null) {
// System.out.println(instring);
// }
try { prozess.waitFor();}
catch(InterruptedException e) { System.out.println("InterruptedException");}
if (prozess.exitValue() == 0)
anzeige[0] = " Ausfuehrung von " +befehl+ " beendet";
else
anzeige[0] = " Fehler bei Ausfuehrung von " + befehl;
}
catch (IOException e) {
System.out.println("IOException bei aufuehrung von "+ befehl);
}
if (aufrufer != null) {
new InfoFenster(aufrufer,"Externer Prozess beendet", true, anzeige);
}
}
}
// Auf der Arbeitsflaeche werden die Icons und deren Verbindungen dargestellt
class Arbeitsflaeche extends Panel {
// Variablen zum Scrollen
int tx;
int ty;
// Hoehe des infoPanels
final static int infoSize = 40;
// Panel und Label fuer die Statusinfo
Panel infoPanel;
Label dateiLabel;
Label pfadLabel;
Label serverLabel;
int lastTouchedDokument = -1;
// Popup Fenster bei Mausklick auf ein Icon
Panel Mousefield;
PopUp Auswahlpunkte;
String popUpItems[];
// Gesamtliste der darzustellenden Dokumente
LinkStructure struktur;
//Hoehe und Breite des Kaestchens zur Darstellung der Dokumente
int dokumentWidth = 70;
int dokumentHeight = 14;
// Konstruktor
Arbeitsflaeche(Dimension size, LinkStructure struktur, Point mittelpunkt) {
// Aufruf des Superklassenkonstruktors
super();
// Zugriff auf Liste aller Dokumente
this.struktur = struktur;
// Layout der Arbeitsflaeche als PositionLayout festlegen
setLayout(new PositionLayout(size.width,size.height));
// Hintergrundfarbe festlegen
setBackground(Color.white);
// Font festlegen
setFont(new Font("Courier", Font.PLAIN, 12));
// Arbeitsflaeche auf Mitte scrollen
tx = mittelpunkt.x;
ty = mittelpunkt.y;
// Popup Panel definieren
Mousefield = new Panel();
Mousefield.setLayout(new FlowLayout());
String[] popUpItems = new String[1];
popUpItems[0] = "Name der Seite";
Auswahlpunkte = new PopUp();
Mousefield.add(Auswahlpunkte);
add("0 0",Mousefield);
Mousefield.hide();
// Info Label
//initialisieren
infoPanel = new Panel();
infoPanel.setLayout(new GridLayout(2,3,0,0));
infoPanel.setBackground(Color.lightGray);
//belegen
infoPanel.add(new Label("WWW-Server: "));
infoPanel.add(new Label(" Pfad:"));
infoPanel.add(new Label(" Dateiname:"));
dateiLabel = new Label("");
pfadLabel = new Label("");
serverLabel = new Label("");
infoPanel.add(serverLabel);
infoPanel.add(pfadLabel);
infoPanel.add(dateiLabel);
//einfuegen
add("0 0",infoPanel);
}
public boolean handleEvent(Event evt) {
Point dokumentKoordinaten;
// Laufvariable
int dokument;
// Ereignis auf der Arbeitsflaeche?
if (evt.target == this) {
// Was macht der Benutzer
switch (evt.id) {
// einfache Bewegung der Maus
case Event.MOUSE_MOVE:
// Im InfoPanel anzeigen, ueber welchem Dokument sich die Maus befindet
// durchsuche dokumentListe, ob Mauskoordinaten passen
for(dokument = struktur.dokumentListe.length -1;
dokument >= 0 ;
dokument--) {
dokumentKoordinaten=struktur.dokumentListe[dokument].liesKoordinaten();
if ( // x - Bereich abpruefen
// Umfeld: halbes Kaestchen und Scrollbarstaende
((dokumentKoordinaten.x < evt.x + dokumentWidth/2 + tx) &&
(dokumentKoordinaten.x > evt.x - dokumentWidth/2 + tx)) &&
// y - Bereich abpruefen
((dokumentKoordinaten.y < evt.y + dokumentHeight/2 + ty) &&
(dokumentKoordinaten.y > evt.y - dokumentHeight/2 + ty))) {
// entsprechendes Dokument gefunden
if (dokument != lastTouchedDokument) {
// Nur wenn Maus ueber neuem Dokument, Labels updaten
dateiLabel.
setText(" "+struktur.dokumentListe[dokument].dateiName);
pfadLabel.
setText(" "+struktur.dokumentListe[dokument].pfadName);
serverLabel.
setText(struktur.dokumentListe[dokument].serverName);
// und am Bildschirm darstellen
infoPanel.layout();
// dann aktuelles Dokument merken
lastTouchedDokument = dokument;
}
// Dokument gefunden, Laufschleife verlassen
break;
}
}
// Wenn aber die Maus gerade ein Dokument verlassen hat
if ((dokument <= 0) && (lastTouchedDokument != -1)) {
// dann Labels loeschen
dateiLabel.setText("");
pfadLabel.setText("");
serverLabel.setText("");
// und am Bildschirm darstellen
infoPanel.layout();
// kennzeichnen, dass kein Dokument ausgewaehlt
lastTouchedDokument = -1;
}
// Handlung erledigt, switch verlassen
break;
// Mausklick
case Event.MOUSE_DOWN:
// PopUp ueber aktuellem Dokument oeffnen
// durchsuche dokumentListe, ob Mauskoordinaten passen
for(dokument = struktur.dokumentListe.length -1;
dokument >= 0 ;
dokument--) {
dokumentKoordinaten=struktur.dokumentListe[dokument].liesKoordinaten();
if ( // x - Bereich abpruefen
// Umfeld: halbes Kaestchen und Scrollbarstaende
((dokumentKoordinaten.x < evt.x + dokumentWidth/2 + tx) &&
(dokumentKoordinaten.x > evt.x - dokumentWidth/2 + tx)) &&
// y - Bereich abpruefen
((dokumentKoordinaten.y < evt.y + dokumentHeight/2 + ty) &&
(dokumentKoordinaten.y > evt.y - dokumentHeight/2 + ty))) {
// entsprechendes Dokument gefunden, dann
// erzeugen des passenden PopUps
// loeschen des alten PopUps
Mousefield.remove(Auswahlpunkte);
// initialisieren der PopUps Items
int laenge = 0;
popUpItems = new
String[12 + struktur.dokumentListe[dokument].vater.length];
// Name an oberster Stelle
popUpItems[laenge++] = struktur.dokumentListe[dokument].name();
popUpItems[laenge++] = "";
// Vermerk, falls Dokument fehlerhaft
if (struktur.dokumentListe[dokument].fehlernummer != 0) {
popUpItems[laenge++] =
"Fehler: ";
popUpItems[laenge++] =
struktur.dokumentListe[dokument].fehlerText();
popUpItems[laenge++] = "";
}
// Zoom anbieten, wenn Soehne vorhanden
if (struktur.dokumentListe[dokument].sohn.length > 0) {
popUpItems[laenge++] = "Zoom auf Unterstruktur";
popUpItems[laenge++] = "";
}
// Anzeige der Vorfahren
if (struktur.dokumentListe[dokument].vater.length != 0) {
popUpItems[laenge++] = "Verweise auf das Dokument in:";
for (int i = 0;
i < struktur.dokumentListe[dokument].vater.length;
i++) {
if (struktur.dokumentListe[dokument].vater[i] != -1)
popUpItems[laenge++] = struktur.dokumentListe[
struktur.dokumentListe[dokument].vater[i]].name();
}
popUpItems[laenge++] = "";
}
// Darstellung anbieten, wenn fehlerfrei
if (struktur.dokumentListe[dokument].fehlernummer == 0) {
popUpItems[laenge++] = "Dokument anzeigen";
popUpItems[laenge++] = "";
}
// Ende Option an letzter Stelle
popUpItems[laenge++] = "Popup schliessen";
Auswahlpunkte=new PopUp(Mousefield, struktur, popUpItems, dokument);
// einfuegen des PopUps
Mousefield.add(Auswahlpunkte);
add((evt.x-30) + " " + (evt.y-10), Mousefield);
// Darstellung des aktuellen Layouts
// labels loeschen
dateiLabel.setText("");
pfadLabel.setText("");
serverLabel.setText("");
layout();
Mousefield.show();
break;
}
// Wenn kein Dokument ausgewaehlt, kein PopUp
else Mousefield.hide();
}
// Handlung erledigt, switch verlassen
break;
}
}
// aufruf der Superklassen-handleEvent Methode
return super.handleEvent(evt);
}
//Zeichnen der Verbindungslinien zu allen Soehnen
void Edges(Graphics g, Dokument dokument) {
//Punkte fuer Anfang und Ende der Verbindungslinien
Point point1, point2;
//Anfangskoordinaten der Linie (Vater) ermitteln
point1 = new Point(0,0);
point1 = dokument.liesKoordinaten();
// Linien zu allen Soehnen ziehen
point2 = new Point(0,0);
for (int i = 0; i < dokument.sohn.length; i++) {
// neue Endkoordinaten ermitteln
point2 = struktur.dokumentListe[dokument.sohn[i]].liesKoordinaten();
if (struktur.dokumentListe[dokument.sohn[i]].fehlernummer != 0) {
// i-ter Sohn fehlerhaft, Linie rot
g.setColor(Color.red);
}
else {
// Sonst linie schwarz
g.setColor(Color.black);
}
g.drawLine(point1.x, point1.y, point2.x, point2.y);
}
}
//Zeichnen aller Verbindungslinien durch Edges()
public void paintEdges(Graphics g) {
//Darstellen der Verbindungen aller Dokumente
for (int i = 0; i < struktur.dokumentListe.length; i++) {
Edges(g, struktur.dokumentListe[i]);
}
}
public void paintNodes(Graphics g) {
Point koordinatenRect;
Point koordinatenString;
int xRect, yRect, xString, yString;
// Variablen zur Darstellung der Dokumentbezeichnung
String darzustellenderText;
int maxDarstellbarerString = 9;
for (int i = 0; i < struktur.dokumentListe.length; i++) {
//Koordinaten des Kaestchens
koordinatenRect = struktur.dokumentListe[i].liesKoordinaten();
xRect = koordinatenRect.x - (dokumentWidth/2);
yRect = koordinatenRect.y - (dokumentHeight/2);
//Darstellen der Kaestchen
//Farbe der Kaestchen festlegen
if (struktur.dokumentListe[i].fehlernummer != 0) {
// Fehlerhaftes Dokument, dann rot
g.setColor(Color.red);
}
else if (! struktur.dokumentListe[i].serverName.equals(
struktur.dokumentListe[struktur.startDokument].serverName)) {
// Fremder Server, dann gelb
g.setColor(Color.yellow);
}
//sonst gruen
else g.setColor(Color.green);
// Kaestchen ausfuellen
g.fillRect(xRect, yRect, dokumentWidth, dokumentHeight);
// schwarzen Rahmen zeichnen
g.setColor(Color.black);
g.drawRect(xRect, yRect, dokumentWidth, dokumentHeight);
//Darzustellenden Namen des Dokuments ermitteln
// Namen erfragen
darzustellenderText = struktur.dokumentListe[i].name();
// passt der ganze Name in nicht das Feld
if (!(darzustellenderText.length() <= maxDarstellbarerString)) {
// dann Namen entsprechend verkuerzen
darzustellenderText =
darzustellenderText.substring(0,maxDarstellbarerString);
}
//Koordinaten, an denen der Text geschrieben wird
koordinatenString = struktur.dokumentListe[i].liesKoordinaten();
// Mittelpunkt verschieben, damit Text in die Box passt
xString = koordinatenString.x - 31;
yString = koordinatenString.y + 5;
// Text schreiben
g.drawString(darzustellenderText, xString, yString);
}
}
// hier erfolgt die Darstellung
public void paint(Graphics g) {
// ausrichtung nach Scrollbars
g.translate(-tx, -ty);
// Darstellung der Struktur
paintEdges(g);
paintNodes(g);
}
}
// Popup fuer die Arbeitsflaeche
class PopUp extends Choice {
// Instanz der obigen Arbeitsflaeche
LinkStructure struktur;
Panel panel;
// index des aktuellen Dokuments
int dokument;
// Konstruktor fuer leeres PopUp
PopUp() {
super();
// ein Item muss vorhanden sein, sonst Fehler
addItem(" ");
}
// eigentlich verwendeter Konstruktor der Klasse
PopUp(Panel panel, LinkStructure struktur, String[] item, int dokument) {
// Aufruf des Superklassenkonstruktors
super();
// Verwendung der jeweiligen Variablen
this.struktur = struktur;
this.panel = panel;
this.dokument = dokument;
// initialisiere Itemliste
for(int i = 0; i < item.length; i++) {
if (item[i] != null) addItem(item[i]);
}
}
public boolean handleEvent(Event evt) {
if (evt.target == this) {
if (getSelectedItem().equals("Zoom auf Unterstruktur")) {
//System.out.println("Zoom ...");
new WebLSD( new LinkStructure(struktur, dokument));
}
if (getSelectedItem().equals("Dokument anzeigen")) {
if (Setup.browser != "") {
(new ExternalProgram(Setup.browser + " " +
struktur.dokumentListe[dokument].url())).start();
}
}
// nach Auswahl PopUp loeschen
panel.hide();
}
// aufruf der Superklassen-handleEvent Methode
return super.handleEvent(evt);
}
}
// Setup Konfigurationen
class Setup extends Dialog {
//Variablen fuer das Layout
Button ok;
Button save;
Button cancel;
Panel topPanel;
Panel subPanel;
// Auswahl der auszuwertenden LOG Files
Choice logMenu;
final int all = 0;
final int tested = 1;
final int own = 2;
static int logFiles = -1;
// gemeinsamer Name der Files
TextField logField;
static String log;
// Name des Programms
TextField progNameField;
static String progName;
// absoluter Name des zu verwendenden Webbrowsers
TextField browserField;
static String browser;
// Name des ini Files
TextField iniNameField;
static String iniName;
// Setup laden
public void load(String setupName) {
// Name der Setup Datei abspeichern
iniName = setupName;
try {
try {
DataInputStream setupDatei = new
DataInputStream(new FileInputStream(setupName));
// fuer alle Datensaetze: einlesen
logFiles = Integer.parseInt(setupDatei.readLine());
log = setupDatei.readLine();
progName = setupDatei.readLine();
browser = setupDatei.readLine();
// .ini schliesen, wenn erledigt
setupDatei.close();
}
catch (FileNotFoundException e) {
// .ini Datei nicht gefunden, Standard Werte setzen
System.out.println("Datei "+ setupName +" nicht gefunden");
logFiles = all;
log = "LinkTest";
progName = "LinkTest";
browser = "";
}
}
catch (IOException e) {
System.out.println("Fehler beim lesen der Datei "
+ setupName
+" aufgetreten");
// Exception vor oder nach dem Einlesen der Werte
if (logFiles == -1) logFiles = all;
if (log == null) log = "LinkTest";
if (progName == null) progName = "LinkTest";
if (browser == null) browser = "";
}
}
//Konstruktor fuer Setup bearbeiten
Setup(Frame fr, String strg, boolean bool) {
//Aufruf des Superklassenkonstruktors
super(fr, strg, bool);
//Dialogbox fuer Setup Bearbeiten... gestalten
setLayout(new BorderLayout());
//Hauptfenster fuer Information gestalten
topPanel = new Panel();
topPanel.setLayout(new GridLayout(6,2));
topPanel.add(new Label("Name des Link Test Programms: "));
topPanel.add(progNameField = new TextField(progName,25));
topPanel.add(new Label("Name der LOG - Dateien:"));
topPanel.add(logField = new TextField(log, 25));
topPanel.add(new Label("Dokumentauswahl:"));
logMenu = new Choice();
logMenu.addItem("alle Dokumente");
logMenu.addItem("fehlerfreie Dokumente");
logMenu.addItem("getestete Dokumente");
logMenu.select(logFiles);
topPanel.add(logMenu);
topPanel.add(new Label("WWW-Browser: "));
topPanel.add(browserField = new TextField(browser,25));
topPanel.add(new Label(""));
topPanel.add(new Label(""));
topPanel.add(new Label("Setup speichern als: "));
topPanel.add(iniNameField = new TextField(iniName,25));
//Unterfenster fuer Button erzeugen
subPanel = new Panel();
subPanel.setLayout(new FlowLayout(FlowLayout.CENTER,50,50));
subPanel.add(ok = new Button ("OK"));
subPanel.add(cancel = new Button("Cancel"));
subPanel.add(new Label(" "));
subPanel.add(save = new Button("Save"));
//das gesamte Layout in DialogBox einfuegen
add("Center",topPanel);
add("South",subPanel);
//Anzeigen der Dialog-Box muss ausserhalb erfolgen
}
public void save() {
try {
DataOutputStream setupDatei = new
DataOutputStream(new FileOutputStream(iniName));
//System.out.println("Schreiben des Files: "+ iniName);
// fuer alle Datensaetze: abspeichern
setupDatei.writeBytes(String.valueOf(logFiles)+"\n");
setupDatei.writeBytes(log+"\n");
setupDatei.writeBytes(progName+"\n");
setupDatei.writeBytes(browser+ "\n");
// .ini schliesen, wenn erledigt
setupDatei.close();
}
catch (IOException e) {
System.out.println(iniName +" konnte nicht korrekt gespeichert werden");
}
}
public boolean handleEvent (Event evt) {
switch (evt.id) {
case Event.ACTION_EVENT:
//cancel, dann verwerfen
if (evt.target == cancel) {
this.hide();
}
// ansonsten uebernehmen
else {
progName = progNameField.getText();
log = logField.getText();
logFiles = logMenu.getSelectedIndex();
browser = browserField.getText();
iniName = iniNameField.getText();
this.hide();
// bei save noch abspeichern
if (evt.target == save) this.save();
}
break;
}
return super.handleEvent(evt);
}
}
// Fenster fuer kurze Informationen
class InfoFenster extends Dialog {
Button ok;
Panel topPanel;
Panel subPanel;
//Konstruktor fuer InfoFenster
InfoFenster(Frame fr, String name, boolean bool, String[] inhalte) {
//Aufruf des Superklassenkonstruktors
super(fr, name, bool);
//Dialogbox fuer Hilfe Ueber... gestalten
setLayout(new BorderLayout());
//Hauptfenster fuer Information gestalten
topPanel = new Panel();
topPanel.setLayout(new GridLayout(inhalte.length + 2, 1));
topPanel.add(new Label(""));
for (int i = 0; i< inhalte.length; i++) {
topPanel.add(new Label(inhalte[i],Label.CENTER));
}
//Unterfenster fuer Button erzeugen
subPanel = new Panel();
subPanel.setLayout(new FlowLayout());
subPanel.add(ok = new Button ("OK"));
//das gesamte Layout in DialogBox einfuegen
add("Center",topPanel);
add("South",subPanel);
//Anzeigen der DialogBox
this.pack();
this.show();
}
public boolean handleEvent (Event evt) {
switch (evt.id) {
case Event.ACTION_EVENT:
if (evt.target instanceof Button) {
if (evt.target == ok) this.hide();
}
break;
}
return super.handleEvent(evt);
}
}