[Schmitzm-commits] r200 - in trunk/src/schmitzm/swing: . resource/locales

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Tue Jul 7 19:07:07 CEST 2009


Author: mojays
Date: 2009-07-07 19:07:06 +0200 (Tue, 07 Jul 2009)
New Revision: 200

Added:
   trunk/src/schmitzm/swing/ToolTipComboBoxRenderer.java
Modified:
   trunk/src/schmitzm/swing/OperationTreePanel.java
   trunk/src/schmitzm/swing/SelectionInputOption.java
   trunk/src/schmitzm/swing/resource/locales/SwingResourceBundle.properties
Log:
new ToolTipComboBoxRenderer
SelectionInputOption now provides tooltips (optional)
OperationTreePanel shows tooltips for operators in combo box

Modified: trunk/src/schmitzm/swing/OperationTreePanel.java
===================================================================
--- trunk/src/schmitzm/swing/OperationTreePanel.java	2009-07-07 17:03:18 UTC (rev 199)
+++ trunk/src/schmitzm/swing/OperationTreePanel.java	2009-07-07 17:07:06 UTC (rev 200)
@@ -80,6 +80,8 @@
   protected Vector<String>         avOperators     = new Vector<String>();
   /** Enthaelt die in der Operator-Auswahl angezeigen Operatoren Konstanten */
   protected HashMap<String,String> avOperatorsDesc = new HashMap<String,String>();
+  /** Enthaelt die in der Operator-Auswahl angezeigen Tooltips der Operatoren. */
+  protected HashMap<Object,String> avOperatorsToolTip = new HashMap<Object,String>();
 
   private JTextField ruleTextField = null;
   private JComboBox  operatorsComboBox = null;
@@ -108,46 +110,46 @@
     layoutConstraints.put(START_BUTTON,      new GridBagConstraints(0,1,1,1,0.0,0.0,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,10,5,10),0,0));
 
     // Zur Verfuegung stehende Operatoren
-    avOperators.add("&");            avOperatorsDesc.put("&",       getOpDesc("and"));
-    avOperators.add("|");            avOperatorsDesc.put("|",       getOpDesc("or"));
-    avOperators.add("!");            avOperatorsDesc.put("!",       getOpDesc("not"));
-    avOperators.add("abs");          avOperatorsDesc.put("abs",     getOpDesc("abs"));
-    avOperators.add("sqrt");         avOperatorsDesc.put("sqrt",    getOpDesc("sqrt"));
-    avOperators.add("round");        avOperatorsDesc.put("round",   getOpDesc("round"));
-    avOperators.add("trunc");        avOperatorsDesc.put("trunc",   getOpDesc("trunc"));
-    avOperators.add("isNaN");        avOperatorsDesc.put("isNaN",   getOpDesc("isNaN"));
+    avOperators.add("&");            fillOperatorDescMaps("&",       "and");
+    avOperators.add("|");            fillOperatorDescMaps("|",       "or");
+    avOperators.add("!");            fillOperatorDescMaps("!",       "not");
+    avOperators.add("abs");          fillOperatorDescMaps("abs",     "abs");
+    avOperators.add("sqrt");         fillOperatorDescMaps("sqrt",    "sqrt");
+    avOperators.add("round");        fillOperatorDescMaps("round",   "round");
+    avOperators.add("trunc");        fillOperatorDescMaps("trunc",   "trunc");
+    avOperators.add("isNaN");        fillOperatorDescMaps("isNaN",   "isNaN");
     avOperators.add("NaN");
-    avOperators.add("random");       avOperatorsDesc.put("random",  getOpDesc("random"));
-    avOperators.add("sin");          avOperatorsDesc.put("sin",     getOpDesc("sin"));
-    avOperators.add("cos");          avOperatorsDesc.put("cos",     getOpDesc("cos"));
-    avOperators.add("tan");          avOperatorsDesc.put("tan",     getOpDesc("tan"));
-    avOperators.add("asin");         avOperatorsDesc.put("asin",    getOpDesc("asin"));
-    avOperators.add("acos");         avOperatorsDesc.put("acos",    getOpDesc("acos"));
-    avOperators.add("atan");         avOperatorsDesc.put("atan",    getOpDesc("atan"));
-    avOperators.add("exp");          avOperatorsDesc.put("exp",     getOpDesc("exp"));
-    avOperators.add("ln");           avOperatorsDesc.put("ln",      getOpDesc("ln"));
-    avOperators.add("log");          avOperatorsDesc.put("log",     getOpDesc("log"));
-    avOperators.add("str");          avOperatorsDesc.put("str",     getOpDesc("str"));
-    avOperators.add("val");          avOperatorsDesc.put("val",     getOpDesc("val"));
-    avOperators.add("len");          avOperatorsDesc.put("len",     getOpDesc("len"));
-    avOperators.add("toupper");      avOperatorsDesc.put("toupper", getOpDesc("toupper"));
-    avOperators.add("tolower");      avOperatorsDesc.put("tolower", getOpDesc("tolower"));
-    avOperators.add("ITE");          avOperatorsDesc.put("ITE",     getOpDesc("ite"));
-    avOperators.add("REGEX");        avOperatorsDesc.put("REGEX",   getOpDesc("regex"));
-    avOperators.add("SUBSTR");       avOperatorsDesc.put("SUBSTR",  getOpDesc("substr"));
+    avOperators.add("random");       fillOperatorDescMaps("random",  "random");
+    avOperators.add("sin");          fillOperatorDescMaps("sin",     "sin");
+    avOperators.add("cos");          fillOperatorDescMaps("cos",     "cos");
+    avOperators.add("tan");          fillOperatorDescMaps("tan",     "tan");
+    avOperators.add("asin");         fillOperatorDescMaps("asin",    "asin");
+    avOperators.add("acos");         fillOperatorDescMaps("acos",    "acos");
+    avOperators.add("atan");         fillOperatorDescMaps("atan",    "atan");
+    avOperators.add("exp");          fillOperatorDescMaps("exp",     "exp");
+    avOperators.add("ln");           fillOperatorDescMaps("ln",      "ln");
+    avOperators.add("log");          fillOperatorDescMaps("log",     "log");
+    avOperators.add("str");          fillOperatorDescMaps("str",     "str");
+    avOperators.add("val");          fillOperatorDescMaps("val",     "val");
+    avOperators.add("len");          fillOperatorDescMaps("len",     "len");
+    avOperators.add("toupper");      fillOperatorDescMaps("toupper", "toupper");
+    avOperators.add("tolower");      fillOperatorDescMaps("tolower", "tolower");
+    avOperators.add("ITE");          fillOperatorDescMaps("ITE",     "ite");
+    avOperators.add("REGEX");        fillOperatorDescMaps("REGEX",   "regex");
+    avOperators.add("SUBSTR");       fillOperatorDescMaps("SUBSTR",  "substr");
     // Die "einfachen Operatoren" and Ende setzen, da diese eigentlich
     // menuell eingegeben werden und nicht so oft gebraucht werden
-    avOperators.add("+");            avOperatorsDesc.put("+",  getOpDesc("plus"));
-    avOperators.add("-");            avOperatorsDesc.put("-",  getOpDesc("minus"));
-    avOperators.add("*");            avOperatorsDesc.put("*",  getOpDesc("multiply"));
-    avOperators.add("/");            avOperatorsDesc.put("/",  getOpDesc("divide"));
-    avOperators.add("^");            avOperatorsDesc.put("^",  getOpDesc("pow"));
-    avOperators.add("=");            avOperatorsDesc.put("=",  getOpDesc("eq"));
-    avOperators.add("<>");           avOperatorsDesc.put("<>", getOpDesc("ne"));
-    avOperators.add("<");            avOperatorsDesc.put("<",  getOpDesc("lt"));
-    avOperators.add("<=");           avOperatorsDesc.put("<=", getOpDesc("le"));
-    avOperators.add(">");            avOperatorsDesc.put(">",  getOpDesc("gt"));
-    avOperators.add(">=");           avOperatorsDesc.put(">=", getOpDesc("ge"));
+    avOperators.add("+");            fillOperatorDescMaps("+",  "plus");
+    avOperators.add("-");            fillOperatorDescMaps("-",  "minus");
+    avOperators.add("*");            fillOperatorDescMaps("*",  "multiply");
+    avOperators.add("/");            fillOperatorDescMaps("/",  "divide");
+    avOperators.add("^");            fillOperatorDescMaps("^",  "pow");
+    avOperators.add("=");            fillOperatorDescMaps("=",  "eq");
+    avOperators.add("<>");           fillOperatorDescMaps("<>", "ne");
+    avOperators.add("<");            fillOperatorDescMaps("<",  "lt");
+    avOperators.add("<=");           fillOperatorDescMaps("<=", "le");
+    avOperators.add(">");            fillOperatorDescMaps(">",  "gt");
+    avOperators.add(">=");           fillOperatorDescMaps(">=", "ge");
     
     // Operatoren filtern
     for (String op : new Vector<String>(avOperators))
@@ -187,10 +189,11 @@
     }
     operators = new SelectionInputOption.Combo<String>(
       SwingUtil.RESOURCE.getString("Operators")+":",  // Label
-      true,  // keine Null-Auswahl
-      opArr, // Operatoren
-      null,  // Default-Wert
-      opDesc // Angezeigte Operatoren
+      true,     // keine Null-Auswahl
+      opArr,    // Operatoren
+      null,     // Default-Wert
+      opDesc,   // Angezeigte Operatoren
+      avOperatorsToolTip // Angezeigte Tooltips fuer die Operatoren
     );
     operatorsComboBox = ((JComboBox)operators.getInputComponent());
     operatorsComboBox.addActionListener( new ActionListener() {
@@ -223,11 +226,18 @@
   }
 
   /**
-   * Liefert die Lokalisation fuer einen Operator. 
-   * @param opKey key fuer den Operator
+   * Befuellt die Maps fuer Beschreibung und Tooltip der Operatoren
+   * @param op    Operator 
+   * @param opKey key fuer den Operator in der Lokalisation
    */
-  private String getOpDesc(String opKey) {
-    return SwingUtil.RESOURCE.getString("OperationTreePanel.OpDesc."+opKey);
+  private void fillOperatorDescMaps(String op, String opKey) {
+    // Operator-Bezeichnung, die in ComboBox angezeigt wird.
+    String desc = SwingUtil.RESOURCE.getString("OperationTreePanel.OpDesc."+opKey);
+    avOperatorsDesc.put(op, desc );
+    // Tooltip zum Operator
+    // --> Map fuer ComboBox-Tooltip muss ueber die in der ComboBox
+    //     angezeigten Werte (also "desc") erstellt werden!
+    avOperatorsToolTip.put(desc, SwingUtil.RESOURCE.getString("OperationTreePanel.OpTooltip."+opKey) );
   }
 
   /**

Modified: trunk/src/schmitzm/swing/SelectionInputOption.java
===================================================================
--- trunk/src/schmitzm/swing/SelectionInputOption.java	2009-07-07 17:03:18 UTC (rev 199)
+++ trunk/src/schmitzm/swing/SelectionInputOption.java	2009-07-07 17:07:06 UTC (rev 200)
@@ -11,16 +11,21 @@
 
 package schmitzm.swing;
 
+import java.awt.Component;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Vector;
 
 import javax.swing.BoxLayout;
 import javax.swing.Icon;
 import javax.swing.JComboBox;
+import javax.swing.JList;
 import javax.swing.JRadioButton;
+import javax.swing.plaf.basic.BasicComboBoxRenderer;
 
 /**
  * Diese Klasse stellt eine Auswahl-Eingabe-Option fuer das {@link MultipleOptionPane}
@@ -38,6 +43,9 @@
   protected E[] selectionObject = null;
   /** Speichert die Objekte, die fuer die Auswahl angezeigt werden. */
   protected Object[] displayObject   = null;
+  /** Speichert fuer jedes {@link #selectionObject} einen ToolTip, der
+   *  fuer das Auswahl-Objekt angezeigt wird. */
+  protected Map<Object,String> displayToolTip  = new HashMap<Object, String>();
 
   /**
    * Erzeugt eine neue Eingabe-Option.
@@ -69,9 +77,26 @@
    *            <code>value</code> und <code>display</code> unterscheiden
    */
   protected SelectionInputOption(String label, boolean inputNeeded, E[] value, E defValue, Object[] display) {
+    this(label,inputNeeded,value,defValue,display,null);
+  }
+
+  /**
+   * Erzeugt eine neue Eingabe-Option.
+   * @param label       Beschreibung
+   * @param inputNeeded gibt an, ob eine Eingabe erforderlich ist
+   * @param value       die zur Auswahl stehenden Objekte
+   * @param defValue    vorgeblendetes Auswahlobjekt
+   * @param display     die anstelle der Auswahl-Objekte angezeigten Objekte
+   *                    (kann <code>null</code> sein)
+   * @param tooltip     die fuer jedes Auswahl-Objekt angezeigten Tooltips
+   *                    (kann <code>null</code> sein)
+   * @exception IllegalArgumentException falls sich die Array-Groessen von
+   *            <code>value</code> und <code>display</code> unterscheiden
+   */
+  protected SelectionInputOption(String label, boolean inputNeeded, E[] value, E defValue, Object[] display, Map<Object,String> tooltip) {
     super(label,inputNeeded);
     // Referenz auf Objekte merken und Komponente befuellen
-    setSelectionObjects(value,display);
+    setSelectionObjects(value,display,tooltip);
     setSelectedItem(defValue);
   }
 
@@ -100,6 +125,21 @@
    *
    */
   public void setSelectionObjects(E[] value, Object[] display) {
+    setSelectionObjects(value,display,null);
+  }
+  
+  /**
+   * Setzt die im Auswahlfeld zur Verfuegung stehenden Eintraege
+   * @param value       die zur Auswahl stehenden Objekte
+   * @param display     die anstelle der Auswahl-Objekte angezeigten Objekte
+   *                    (kann <code>null</code> sein)
+   * @param tooltip     die fuer jedes Auswahl-Objekt angezeigten Tooltips
+   *                    (kann <code>null</code> sein)
+   * @exception IllegalArgumentException falls sich die Array-Groessen von
+   *            <code>value</code> und <code>display</code> unterscheiden
+   *
+   */
+  public void setSelectionObjects(E[] value, Object[] display, Map<Object,String> tooltip) {
     // werden keine Wert angegeben, wird dies wie eine leere
     // Menge behandelt
     if (value == null)
@@ -116,6 +156,7 @@
     Object lastSelection = getValue();
     this.selectionObject = value;
     this.displayObject   = display;
+    this.displayToolTip  = tooltip;
     performSelectionUpdate();
     setSelectedItem(lastSelection);
   }
@@ -278,6 +319,23 @@
     }
 
     /**
+     * Erzeugt eine neue Auswahl-Option.
+     * @param label       Beschreibung
+     * @param inputNeeded gibt an, ob eine Eingabe erforderlich ist
+     * @param value       die zur Auswahl stehenden Objekte
+     * @param defValue    vorgeblendetes Auswahlobjekt
+     * @param display     die anstelle der Auswahl-Objekte angezeigten Objekte
+     *                    (kann <code>null</code> sein)
+     * @param tooltip     die fuer jedes Auswahl-Objekt angezeigten Tooltips
+     *                    (kann <code>null</code> sein)
+     * @exception IllegalArgumentException falls sich die Array-Groessen von
+     *            <code>value</code> und <code>display</code> unterscheiden
+     */
+    public Combo(String label, boolean inputNeeded, E[] value, E defValue, Object[] display, Map<Object,String> tooltip) {
+      super(label,inputNeeded,value,defValue,display,tooltip);
+    }
+
+    /**
      * Erzeugt eine neue Auswahl-Option. Es wird das erste Auswahl-Objekt
      * vorgeblendet.
      * @param label       Beschreibung
@@ -307,6 +365,7 @@
      */
     protected JComboBox createInputComponent() {
       JComboBox comboBox = new JComboBox();
+      // Change Listener
       comboBox.addItemListener( new ItemListener() {
         Object oldValue = null;
         public void itemStateChanged(ItemEvent e) {
@@ -344,6 +403,8 @@
       ((JComboBox)inpComp).removeAllItems();
       for (int i=0; i<displayObject.length; i++)
         ((JComboBox)inpComp).addItem( displayObject[i] );
+      // Tooltips neu setzen
+      ((JComboBox)inpComp).setRenderer( new ToolTipComboBoxRenderer(displayToolTip) );
     }
 
     /**
@@ -423,6 +484,23 @@
     }
 
     /**
+     * Erzeugt eine neue Auswahl-Option.
+     * @param label       Beschreibung
+     * @param inputNeeded gibt an, ob eine Eingabe erforderlich ist
+     * @param value       die zur Auswahl stehenden Objekte
+     * @param defValue    vorgeblendetes Auswahlobjekt
+     * @param display     die anstelle der Auswahl-Objekte angezeigten Objekte
+     *                    (kann <code>null</code> sein)
+     * @param tooltip     die fuer jedes Auswahl-Objekt angezeigten Tooltips
+     *                    (kann <code>null</code> sein)
+     * @exception IllegalArgumentException falls sich die Array-Groessen von
+     *            <code>value</code> und <code>display</code> unterscheiden
+     */
+    public Radio(String label, boolean inputNeeded, E[] value, E defValue, Object[] display, Map<Object,String> tooltip) {
+      super(label,inputNeeded,value,defValue,display,tooltip);
+    }
+
+    /**
      * Erzeugt eine neue Auswahl-Option. Es wird das erste Auswahl-Objekt
      * vorgeblendet.
      * @param label       Beschreibung
@@ -470,13 +548,16 @@
       buttonPanel.removeAll();
       if ( buttonList != null )
         buttonList.clear();
-      for (Object disObj : displayObject) {
+      for (int i=0; i<displayObject.length; i++) {
+        Object disObj = displayObject[i];
         JRadioButton button = null;
         if ( disObj instanceof Icon )
           button = new JRadioButton((Icon)disObj);
         else
           button = new JRadioButton(disObj.toString());
         button.addActionListener(actionListener);
+        if (this.displayToolTip != null)
+          button.setToolTipText( (String)displayToolTip.get(selectionObject[i]) );
         buttonPanel.add(button);
         buttonGroup.add(button);
         buttonList.add(button);

Added: trunk/src/schmitzm/swing/ToolTipComboBoxRenderer.java
===================================================================
--- trunk/src/schmitzm/swing/ToolTipComboBoxRenderer.java	2009-07-07 17:03:18 UTC (rev 199)
+++ trunk/src/schmitzm/swing/ToolTipComboBoxRenderer.java	2009-07-07 17:07:06 UTC (rev 200)
@@ -0,0 +1,52 @@
+/** SCHMITZM - This file is part of the java library of Martin O.J. Schmitz (SCHMITZM)
+
+    This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
+    This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+    You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
+
+    Diese Bibliothek ist freie Software; Sie dürfen sie unter den Bedingungen der GNU Lesser General Public License, wie von der Free Software Foundation veröffentlicht, weiterverteilen und/oder modifizieren; entweder gemäß Version 2.1 der Lizenz oder (nach Ihrer Option) jeder späteren Version.
+    Diese Bibliothek wird in der Hoffnung weiterverbreitet, daß sie nützlich sein wird, jedoch OHNE IRGENDEINE GARANTIE, auch ohne die implizierte Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. Mehr Details finden Sie in der GNU Lesser General Public License.
+    Sie sollten eine Kopie der GNU Lesser General Public License zusammen mit dieser Bibliothek erhalten haben; falls nicht, schreiben Sie an die Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA.
+ **/
+
+package schmitzm.swing;
+
+import java.awt.Component;
+import java.util.Map;
+
+import javax.swing.JList;
+import javax.swing.plaf.basic.BasicComboBoxRenderer;
+
+/**
+ * Extends the {@link BasicComboBoxRenderer} with tooltip functionality.
+ * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
+ */
+public class ToolTipComboBoxRenderer extends BasicComboBoxRenderer {
+  /** Holds the tooltips for each list value */
+  protected Map<Object,String> tooltips = null;
+  
+  /**
+   * Creates a new renderer.
+   * @param tooltips map with tooltip for each list value (can be {@code null})
+   */
+  public ToolTipComboBoxRenderer(Map<Object,String> tooltips) {
+    super();
+    this.tooltips = tooltips;
+  }
+  
+  /**
+   * After calling the super method, the tooltip is set (if value is selected).
+   */
+  public Component getListCellRendererComponent(JList list, Object value,
+      int index, boolean isSelected, boolean cellHasFocus) {
+    // Create component
+    Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
+    // set tooltip, if item is selected
+    if ( tooltips != null && isSelected && index >= 0 ) {
+      String tooltip = tooltips.get(value);
+      list.setToolTipText(tooltip);
+    }
+    return c;
+  }
+
+}

Modified: trunk/src/schmitzm/swing/resource/locales/SwingResourceBundle.properties
===================================================================
--- trunk/src/schmitzm/swing/resource/locales/SwingResourceBundle.properties	2009-07-07 17:03:18 UTC (rev 199)
+++ trunk/src/schmitzm/swing/resource/locales/SwingResourceBundle.properties	2009-07-07 17:07:06 UTC (rev 200)
@@ -103,8 +103,8 @@
 OperationTreePanel.OpTooltip.minus=-Subtraction
 OperationTreePanel.OpTooltip.multiply=Multiplication
 OperationTreePanel.OpTooltip.divide=Division
-OperationTreePanel.OpTooltip.pow=^
-OperationTreePanel.OpTooltip.eq=Euqals - e.g. $VAL1 = 23
+OperationTreePanel.OpTooltip.pow=Power - e.g. $VAL ^ 9
+OperationTreePanel.OpTooltip.eq=Equals - e.g. $VAL1 = 23
 OperationTreePanel.OpTooltip.ne=Unequals - e.g. $VAL <> 45
 OperationTreePanel.OpTooltip.lt=Lesser - e.g. $VAL < $VAL2
 OperationTreePanel.OpTooltip.le=Lesser or equal



More information about the Schmitzm-commits mailing list