updates for 0.9.4
[debian/openrocket] / src / net / sf / openrocket / gui / components / StyledLabel.java
diff --git a/src/net/sf/openrocket/gui/components/StyledLabel.java b/src/net/sf/openrocket/gui/components/StyledLabel.java
new file mode 100644 (file)
index 0000000..cad8a25
--- /dev/null
@@ -0,0 +1,111 @@
+package net.sf.openrocket.gui.components;
+
+import java.awt.Font;
+
+import javax.swing.JLabel;
+import javax.swing.SwingConstants;
+
+/**
+ * A resizeable and styleable JLabel.  The method {@link #resizeFont(float)} changes the 
+ * current font size by the given (positive or negative) amount.  The change is relative 
+ * to the current font size.  The method {@link #setFontStyle(Style)} sets the style
+ * (bold/italic) of the font.
+ * <p>
+ * A nice small text is achievable by  <code>new ResizeLabel("My text", -2);</code>
+ * 
+ * @author Sampo Niskanen <sampo.niskanen@iki.fi>
+ */
+
+public class StyledLabel extends JLabel {
+       
+       public enum Style {
+               PLAIN(Font.PLAIN),
+               BOLD(Font.BOLD),
+               ITALIC(Font.ITALIC),
+               BOLD_ITALIC(Font.BOLD | Font.ITALIC);
+               
+               private int style;
+               Style(int fontStyle) {
+                       this.style = fontStyle;
+               }
+               public int getFontStyle() {
+                       return style;
+               }
+       }
+       
+       
+       
+       public StyledLabel() {
+               this("", SwingConstants.LEADING, 0f);
+       }
+       
+       public StyledLabel(String text) {
+               this(text, SwingConstants.LEADING, 0f);
+       }
+       
+       public StyledLabel(float size) {
+               this("", SwingConstants.LEADING, size);
+       }
+       
+       public StyledLabel(String text, float size) {
+               this(text, SwingConstants.LEADING, size);
+       }
+       
+       public StyledLabel(String text, int horizontalAlignment, float size) {
+               super(text, horizontalAlignment);
+               resizeFont(size);
+               checkPreferredSize(size, Style.PLAIN);
+       }
+       
+       
+
+       public StyledLabel(Style style) {
+               this("", SwingConstants.LEADING, 0f, style);
+       }
+       
+       public StyledLabel(String text, Style style) {
+               this(text, SwingConstants.LEADING, 0f, style);
+       }
+       
+       public StyledLabel(float size, Style style) {
+               this("", SwingConstants.LEADING, size, style);
+       }
+       
+       public StyledLabel(String text, float size, Style style) {
+               this(text, SwingConstants.LEADING, size, style);
+       }
+       
+       public StyledLabel(String text, int horizontalAlignment, float size, Style style) {
+               super(text, horizontalAlignment);
+               resizeFont(size);
+               setFontStyle(style);
+               checkPreferredSize(size, style);
+       }
+       
+       
+       
+       
+       private void checkPreferredSize(float size, Style style) {
+               String str = this.getText();
+               if (str.startsWith("<html>") && str.indexOf("<br") < 0) {
+                       StyledLabel label = new StyledLabel("plaintext", size, style);
+                       label.validate();
+                       System.out.println("Plain-text label: " + label.getPreferredSize());
+                       System.out.println("HTML label: " + this.getPreferredSize());
+               }
+       }
+       
+       
+       
+       public void resizeFont(float size) {
+               Font font = this.getFont();
+               font = font.deriveFont(font.getSize2D()+size);
+               this.setFont(font);
+       }
+       
+       public void setFontStyle(Style style) {
+               Font font = this.getFont();
+               font = font.deriveFont(style.getFontStyle());
+               this.setFont(font);
+       }
+}