package hexenschach.gui;
import java.awt.Dimension;
import javax.swing.JPanel;
import javax.swing.JEditorPane;
import javax.swing.text.html.HTMLEditorKit;
/**
* Panel, welches die Direkthilfe-Box enthaelt.
* @author Tobias Marquardt
*/
public class DirectHelp extends JPanel implements GUIContainer {
private static final long serialVersionUID = 3784838270016625250L;
private GUI gui;
// JEditorPane zur Anzeige der Direkthilfe
private JEditorPane helpBox;
static final int xSizeHelpBox = 315;
static final int ySizeHelpBox = 137;
static final int xPosHelpBox = 5;
static final int yPosHelpBox = 7;
// Größe des Panels
static final int xSize = 328;
static final int ySize = 150;
// Maximale Anzahl Zeilen
static final int maxLines = 7;
// Der aktuelle Text in der Direkt-Hilfe
private String text;
DirectHelp(GUI gui) {
this.gui = gui;
initLayout();
initComponents();
initContainerProperties();
gui.setDirectHelpReference(this);
text = "";
}
public void initLayout() {
setLayout(null);
}
public void initComponents() {
helpBox = new JEditorPane();
// HTML-Formatierung im Pane benutzen
helpBox.setEditorKit(new HTMLEditorKit());
helpBox.setEditable(false);
helpBox.setOpaque(false);
helpBox.setBounds(xPosHelpBox, yPosHelpBox, xSizeHelpBox, ySizeHelpBox);
add(helpBox);
}
public void initContainerProperties() {
setOpaque(false); //Paneltransparenz
setBorder(null);
setPreferredSize(new Dimension(xSize, ySize));
}
public void setText(String newLine) {
// Wenn der text leer ist (was normalerweise beim ersten Aufruf von setText
// der Fall ist, fülle Textbox komplett mit Zeilenumbrüchen.
if(text.equals("")) {
for(int i = 0; i < maxLines; i++)
text = text + "<br />";
}
// Nachsehn, ob in newLine Break-Tags enthalten sind. Wenn ja, wie viele?
int breaksInNewLine = countBreaks(newLine);
// Am Anfang des Textes so viele Zeilen entfernen,
// wie Zeilenumbrüche in newLine vorhanden sind.
int i = 0;
do {
removeFirstLine();
i++;
}
while(i <= breaksInNewLine);
// Füge die neue Zeile hinzu
text = text + newLine + "<br />" ;
// Textfeld aktualisieren
helpBox.setText("<font face=\"\"color=\"ecb64a\">" + text + "</font>");
}
/**
* Zählt wie oft "<br />" im übergebenen Text enthalten ist.
* @param text String in dem nach HTML-Umbrüchen gesucht werden soll.
* @return Anzahl der Umbrüche
*/
private int countBreaks(String text) {
if(text.indexOf("<br />") == -1)
return 0;
else
return countBreaks(text.substring(text.indexOf("<br />") + 6)) + 1;
}
/**
* Löscht die erste Zeile des Textfeldes.
* Dabei wird einfach das erste Break-Tag gesucht
* und mit allem was davor steht gelöscht.
*/
private void removeFirstLine() {
int firstBreak = text.indexOf("<br />");
text = text.substring(firstBreak + 6);
}
/**
* Lösch alle Text-Zeilen aus der Direkt-Hilfe.
*/
public void deleteText() {
text = "";
}
}