warning dialog - fixes JAL-1099
authorjprocter <jprocter@compbio.dundee.ac.uk>
Wed, 16 May 2012 10:48:55 +0000 (11:48 +0100)
committerjprocter <jprocter@compbio.dundee.ac.uk>
Wed, 16 May 2012 10:54:05 +0000 (11:54 +0100)
src/jalview/appletgui/FontChooser.java
src/jalview/gui/FontChooser.java

index bdadc5d..2f38084 100755 (executable)
@@ -153,20 +153,54 @@ public class FontChooser extends Panel implements ActionListener,
     frame.setVisible(false);
   }
 
+  private Font lastSelected=null; 
+  private int lastSelStyle=0;
+  private int lastSelSize=0;
+  /**
+   * DOCUMENT ME!
+   */
   void changeFont()
   {
+    if (lastSelected==null)
+    {
+      // initialise with original font
+      lastSelected=oldFont;
+      lastSelSize=oldFont.getSize();
+      lastSelStyle=oldFont.getStyle();
+    }
+    
     Font newFont = new Font(fontName.getSelectedItem().toString(),
             fontStyle.getSelectedIndex(), Integer.parseInt(fontSize
                     .getSelectedItem().toString()));
-    if (ap != null)
-    {
-      ap.av.setFont(newFont);
-      ap.fontChanged();
+    FontMetrics fm = getGraphics().getFontMetrics(newFont);
+    double mw=fm.getStringBounds("M", getGraphics())
+            .getWidth(),iw=fm.getStringBounds("I", getGraphics())
+                    .getWidth();
+    if (mw<1 || iw < 1) {
+       // TODO: JAL-1100
+      fontName.select(lastSelected.getName());
+      fontStyle.select(lastSelStyle);
+      fontSize.select(""+lastSelSize);
+      JVDialog d = new JVDialog(this.frame, "Invalid Font", true, 350,200);
+      Panel mp=new Panel();
+      d.cancel.setVisible(false);
+      mp.setLayout(new FlowLayout());
+      mp.add(new Label("Font doesn't have letters defined\nso cannot be used\nwith alignment data."));
+      d.setMainPanel(mp);
+      d.setVisible(true);
+      return;
     }
-    else if (tp != null)
+    if (tp != null)
     {
       tp.setTreeFont(newFont);
     }
+    else if (ap != null)
+    {
+      ap.av.setFont(newFont);
+      ap.fontChanged();
+    }
+    // remember last selected
+    lastSelected=newFont;
   }
 
   protected void fontName_actionPerformed()
index 310361a..d12c697 100755 (executable)
@@ -179,14 +179,43 @@ public class FontChooser extends GFontChooser
     }
   }
 
+  private Font lastSelected=null; 
+  private int lastSelStyle=0;
+  private int lastSelSize=0;
+  private boolean lastSelMono=false;
   /**
    * DOCUMENT ME!
    */
   void changeFont()
   {
+    if (lastSelected==null)
+    {
+      // initialise with original font
+      lastSelected=oldFont;
+      lastSelSize=oldFont.getSize();
+      lastSelStyle=oldFont.getStyle();
+      FontMetrics fm = getGraphics().getFontMetrics(oldFont);
+      double mw=fm.getStringBounds("M", getGraphics())
+              .getWidth(),iw=fm.getStringBounds("I", getGraphics())
+                      .getWidth();
+      lastSelMono=mw==iw;
+    }
+    
     Font newFont = new Font(fontName.getSelectedItem().toString(),
             fontStyle.getSelectedIndex(), Integer.parseInt(fontSize
                     .getSelectedItem().toString()));
+    FontMetrics fm = getGraphics().getFontMetrics(newFont);
+    double mw=fm.getStringBounds("M", getGraphics())
+            .getWidth(),iw=fm.getStringBounds("I", getGraphics())
+                    .getWidth();
+    if (mw<1 || iw < 1) {
+      fontName.setSelectedItem(lastSelected.getName());
+      fontStyle.setSelectedIndex(lastSelStyle);
+      fontSize.setSelectedItem(""+lastSelSize);
+      monospaced.setSelected(lastSelMono);
+      JOptionPane.showInternalMessageDialog(this, "Font doesn't have letters defined\nso cannot be used\nwith alignment data.", "Invalid Font", JOptionPane.WARNING_MESSAGE);
+      return;
+    }
     if (tp != null)
     {
       tp.setTreeFont(newFont);
@@ -197,12 +226,10 @@ public class FontChooser extends GFontChooser
       ap.fontChanged();
     }
 
-    FontMetrics fm = getGraphics().getFontMetrics(newFont);
-
-    monospaced.setSelected(fm.getStringBounds("M", getGraphics())
-            .getWidth() == fm.getStringBounds("|", getGraphics())
-            .getWidth());
 
+    monospaced.setSelected(mw==iw);
+    // remember last selected
+    lastSelected=newFont;
   }
 
   /**