Changeset 2629


Ignore:
Timestamp:
04/17/07 11:17:08 (13 years ago)
Author:
melissa
Message:

Updated to use FormLayout.

Location:
trunk/loci/ome/notebook
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/ome/notebook/Notebook.java

    r2585 r2629  
    2424package loci.ome.notebook; 
    2525 
     26import com.jgoodies.forms.layout.*; 
    2627import java.awt.*; 
    2728import java.awt.event.*; 
     
    208209      JScrollPane scroll = new JScrollPane(); 
    209210      JPanel panel = new JPanel(); 
    210       panel.setLayout(new GridLayout(1, 2)); 
     211       
     212      String rowString = ""; 
     213      String colString = "pref:grow,"; 
     214 
     215      int paddingColumns = 1; 
     216 
     217      if (currentTemplate.editTemplateFields()) { 
     218        colString = "30dlu,30dlu,3dlu,pref:grow,"; 
     219        paddingColumns = 4;  
     220      } 
     221 
     222      int numRows = tabs[i].getRows(); 
     223      if (numRows < 1) numRows = 1; 
     224      int numColumns = tabs[i].getColumns(); 
     225      if (numColumns < 2) numColumns = 2; 
     226      for (int j=0; j<numRows; j++) { 
     227        rowString += "pref:grow,"; 
     228      } 
     229      for (int j=0; j<numColumns; j++) { 
     230        colString += "pref:grow,"; 
     231      }  
     232      panel.setLayout(new FormLayout(colString, rowString)); 
     233 
    211234      scroll.getViewport().add(panel); 
    212      
     235    
     236      int rowNumber = 1; 
     237 
     238      CellConstraints cc = new CellConstraints(); 
     239 
    213240      for (int j=0; j<groups.size(); j++) { 
    214241        TemplateGroup group = (TemplateGroup) groups.get(j);  
    215242        for (int r=0; r<group.getRepetitions(); r++) {  
    216           GridLayout grid = (GridLayout) panel.getLayout(); 
    217           grid.setRows(grid.getRows() + group.getNumFields() + 1); 
    218           panel.setLayout(grid); 
    219       
    220           panel.add(new JLabel(group.getName() + " #" + (r + 1))); 
    221           if (currentTemplate.editTemplateFields() && r == 0) { 
    222             JButton add = new JButton("Add new instance of this group"); 
     243          FormLayout layout = (FormLayout) panel.getLayout(); 
     244          if (tabs[i].getRows() == 0) {  
     245            for (int n=0; n<group.getNumFields() + 1; n++) { 
     246              layout.appendRow(new RowSpec("pref:grow")); 
     247            } 
     248            panel.setLayout(layout); 
     249          }  
     250     
     251          panel.add(new JLabel(group.getName() + " #" + (r + 1)),  
     252            cc.xyw(paddingColumns, rowNumber, 2)); 
     253          if (currentTemplate.editTemplateFields()) { 
     254            JButton add = new JButton("+"); 
    223255            add.setActionCommand("cloneGroup" + i + "-" + j); 
    224256            add.addActionListener(this); 
    225             panel.add(add); 
    226           } 
    227           else panel.add(new JLabel("")); 
     257            panel.add(add, cc.xy(1, rowNumber)); 
     258           
     259            JButton remove = new JButton("-"); 
     260            remove.setActionCommand("removeGroup" + i + "-" + j); 
     261            remove.addActionListener(this); 
     262            panel.add(remove, cc.xy(2, rowNumber)); 
     263          }  
     264 
     265          rowNumber++; 
    228266 
    229267          for (int k=0; k<group.getNumFields(); k++) { 
    230268            TemplateField field = group.getField(r, k);  
    231             panel.add(new JLabel(field.getName())); 
    232             panel.add(field.getComponent()); 
     269            if (field.getRow() != -1) {  
     270              panel.add(new JLabel(field.getName()),  
     271                cc.xy(field.getColumn() + paddingColumns + 1,  
     272                field.getRow() + 1)); 
     273              panel.add(field.getComponent(),  
     274                cc.xy(field.getColumn() + paddingColumns + 2,  
     275                field.getRow() + 1)); 
     276            }  
     277            else { 
     278              panel.add(new JLabel(field.getName()),  
     279                cc.xy(paddingColumns + 1, rowNumber)); 
     280              panel.add(field.getComponent(),  
     281                cc.xy(paddingColumns + 2, rowNumber)); 
     282              rowNumber++;  
     283            } 
    233284          }  
    234285        }  
    235286      } 
    236287 
    237       GridLayout grid = (GridLayout) panel.getLayout(); 
    238       grid.setRows(grid.getRows() + fields.size() - 1); 
    239       panel.setLayout(grid); 
     288      FormLayout layout = (FormLayout) panel.getLayout(); 
     289      for (int j=0; j<fields.size() - 1; j++) { 
     290        layout.appendRow(new RowSpec("pref:grow")); 
     291      } 
     292      panel.setLayout(layout); 
    240293 
    241294      for (int j=0; j<fields.size(); j++) { 
    242         panel.add(new JLabel(tabs[i].getField(j).getName())); 
    243         panel.add(tabs[i].getField(j).getComponent()); 
     295        TemplateField f = tabs[i].getField(j);  
     296        if (f.getRow() != -1) {  
     297          panel.add(new JLabel(f.getName()),  
     298            cc.xyw(f.getColumn() + 1, f.getRow() + 1, paddingColumns + 1)); 
     299          panel.add(f.getComponent(),  
     300            cc.xyw(f.getColumn() + 2, f.getRow() + 1, 2)); 
     301        }  
     302        else { 
     303          panel.add(new JLabel(f.getName()),  
     304            cc.xyw(1, rowNumber, paddingColumns + 1)); 
     305          panel.add(f.getComponent(), cc.xyw(paddingColumns + 1, rowNumber, 2)); 
     306          rowNumber++;  
     307        } 
    244308      } 
    245309     
     
    301365      // check if the user wants to save the current metadata first  
    302366 
    303       CustomDialog dialog =  
    304         new CustomDialog(this, "", "Save current metadata?");  
     367      JOptionPane.showConfirmDialog(this, "Save current metadata?", "",  
     368        JOptionPane.YES_NO_OPTION, JOptionPane.PLAIN_MESSAGE);  
     369      actionPerformed(new ActionEvent(this, -1, "save")); 
     370      loadTemplate(templateName);  
    305371    } 
    306372    else if (cmd.equals("open")) { 
     
    363429          } 
    364430        } 
    365          
     431        
     432        if (name == null) return; 
    366433        if (!name.endsWith(".ome")) name += ".ome"; 
    367434 
     
    419486      } 
    420487    }  
    421    
     488    else if (cmd.startsWith("removeGroup")) { 
     489      cmd = cmd.substring(11); 
     490      int tabIndex = Integer.parseInt(cmd.substring(0, cmd.indexOf("-"))); 
     491      int groupIndex = Integer.parseInt(cmd.substring(cmd.indexOf("-") + 1)); 
     492 
     493      TemplateTab tab = currentTemplate.getTabs()[tabIndex]; 
     494      TemplateGroup group = tab.getGroup(groupIndex); 
     495      group.setRepetitions(group.getRepetitions() - 1);   
     496      loadTemplate(currentTemplate);  
     497      try {  
     498        if (currentFile != null) openFile(currentFile);  
     499      } 
     500      catch (Exception exc) { 
     501        exc.printStackTrace(); 
     502      } 
     503    } 
     504 
    422505  } 
    423506 
     
    560643  } 
    561644 
    562   // -- Helper class -- 
    563  
    564   /** Custom yes/no dialog. */ 
    565   public class CustomDialog extends JFrame implements ActionListener { 
    566     Notebook parent;  
    567  
    568     // TODO : this window isn't packed very nicely 
    569     public CustomDialog(Notebook parent, String title, String question) { 
    570       super(title); 
    571  
    572       this.parent = parent; 
    573  
    574       JLabel label = new JLabel(question); 
    575  
    576       JButton yes = new JButton("Yes"); 
    577       yes.setActionCommand("yes"); 
    578       yes.addActionListener(this); 
    579       JButton no = new JButton("No"); 
    580       no.setActionCommand("no"); 
    581       no.addActionListener(this); 
    582   
    583       JPanel content = new JPanel(); 
    584       content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));  
    585       content.add(label); 
    586       content.add(yes); 
    587       content.add(no); 
    588  
    589       add(content); 
    590       setPreferredSize(new Dimension(200, 150)); 
    591  
    592       pack(); 
    593       setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
    594       setVisible(true); 
    595     } 
    596    
    597     public void actionPerformed(ActionEvent e) { 
    598       String cmd = e.getActionCommand(); 
    599   
    600       if (cmd.equals("yes")) { 
    601         parent.actionPerformed(new ActionEvent(this, -1, "save")); 
    602         parent.loadTemplate(parent.templateName);  
    603       } 
    604       dispose();  
    605     } 
    606   } 
    607  
    608645  // -- Main method -- 
    609646 
     
    613650      if (args[i].equals("-template")) { 
    614651        if (args.length > i + 1) {  
    615           template = args[i++]; 
     652          template = args[++i]; 
    616653        } 
    617654        else System.err.println("Please specify a template file"); 
  • trunk/loci/ome/notebook/Template.java

    r2513 r2629  
    8787  } 
    8888 
     89  /** Constructs a new Template from TemplateTabs and a list of options. */ 
     90  public Template(TemplateTab[] tabs, Hashtable options) { 
     91    this.tabs = tabs; 
     92    this.options = options; 
     93  } 
     94 
    8995  // -- Template API methods -- 
    9096 
     
    163169        line = line.substring(1, line.length() - 1); 
    164170        currentTab.setName(line);  
     171      } 
     172      else if (openTab && line.startsWith("grid")) { 
     173        line = line.substring(line.indexOf(" ")).trim(); 
     174        line = line.substring(1, line.length() - 1); 
     175        int r = Integer.parseInt(line.substring(0, line.indexOf(","))); 
     176        int c = Integer.parseInt(line.substring(line.indexOf(",") + 1)); 
     177        currentTab.setRows(r); 
     178        currentTab.setColumns(c); 
    165179      } 
    166180      else if (openTab && line.startsWith("}")) { 
     
    255269 
    256270  /** Save the template to a file. */ 
    257   public void save(String filename) { 
    258     // TODO 
     271  public void save(String filename) throws IOException { 
     272    BufferedWriter writer = new BufferedWriter(new FileWriter(filename));  
     273    
     274    if (options != null) { 
     275      Enumeration keys = options.keys(); 
     276      while (keys.hasMoreElements()) { 
     277        String key = keys.nextElement().toString(); 
     278        writer.write(key + " \"" + options.get(key) + "\"\n"); 
     279      } 
     280    }  
     281    if (tabs == null) return; 
     282 
     283    for (int i=0; i<tabs.length; i++) { 
     284      writer.write("tab {\n"); 
     285      writer.write("  name \"" + tabs[i].getName() + "\"\n"); 
     286       
     287      for (int j=0; j<tabs[i].getNumFields(); j++) { 
     288        TemplateField t = tabs[i].getField(j);  
     289        writer.write("  field {\n"); 
     290        writer.write("    name \"" + t.getName() + "\"\n"); 
     291        writer.write("    type \"" + t.getType() + "\"\n"); 
     292        if (t.getMap() != null) { 
     293          writer.write("    map \"" + t.getMap() + "\"\n"); 
     294        }  
     295        if (t.getDefaultValue() != null) { 
     296          writer.write("    default \"" + t.getDefaultValue() + "\"\n"); 
     297        } 
     298        writer.write("    grid \"" + t.getRow() + "," + t.getColumn() + "\"\n"); 
     299 
     300        String[] enums = t.getEnums(); 
     301        if (enums != null && enums.length > 0) { 
     302          writer.write("    values {"); 
     303          for (int k=0; k<enums.length; k++) { 
     304            writer.write("\"" + enums[k] + "\"");  
     305            if (k < enums.length - 1) writer.write(", ");  
     306          } 
     307          writer.write("}\n");  
     308        } 
     309        writer.write("  }\n");  
     310      } 
     311      
     312      for (int j=0; j<tabs[i].getNumGroups(); j++) { 
     313        TemplateGroup g = tabs[i].getGroup(j);  
     314 
     315        writer.write("  group {\n"); 
     316        writer.write("    count\"" + g.getRepetitions() + "\"\n"); 
     317        writer.write("    name\"" + g.getName() + "\"\n"); 
     318 
     319        for (int k=0; k<g.getNumFields(); k++) { 
     320          TemplateField t = g.getField(0, k);  
     321          writer.write("    field {\n"); 
     322          writer.write("      name \"" + t.getName() + "\"\n"); 
     323          writer.write("      type \"" + t.getType() + "\"\n"); 
     324          if (t.getMap() != null) { 
     325            writer.write("      map \"" + t.getMap() + "\"\n"); 
     326          }  
     327          if (t.getDefaultValue() != null) { 
     328            writer.write("      default \"" + t.getDefaultValue() + "\"\n"); 
     329          }  
     330          writer.write("      grid \"" + t.getRow() + "," +  
     331            t.getColumn() + "\"\n"); 
     332           
     333          String[] enums = t.getEnums(); 
     334          if (enums != null && enums.length > 0) { 
     335            writer.write("      values {"); 
     336            for (int m=0; m<enums.length; m++) { 
     337              writer.write("\"" + enums[m] + "\"");  
     338              if (m < enums.length - 1) writer.write(", ");  
     339            } 
     340            writer.write("}\n");  
     341          } 
     342          writer.write("    }\n");  
     343        } 
     344       
     345        writer.write("  }\n");  
     346      } 
     347 
     348      writer.write("}\n"); 
     349    } 
     350   
     351    writer.close();  
    259352  } 
    260353 
     
    325418  /** Returns whether or not fields in this template can be edited. */ 
    326419  public boolean isEditable() { 
    327     return ((String) options.get("editable")).toLowerCase().equals("true"); 
     420    String editable = (String) options.get("editable"); 
     421    return editable == null ? true : editable.toLowerCase().equals("true"); 
    328422  } 
    329423 
     
    332426   */ 
    333427  public boolean preferCompanion() { 
    334     return  
    335       ((String) options.get("prefer-companion")).toLowerCase().equals("true"); 
     428    String prefer = (String) options.get("prefer-companion"); 
     429    return prefer == null ? true : prefer.toLowerCase().equals("true");  
    336430  } 
    337431 
    338432  /** Returns true if we can edit this template on-the-fly. */ 
    339433  public boolean editTemplateFields() { 
    340     return ((String) options.get( 
    341       "edit-template-fields")).toLowerCase().equals("true"); 
     434    String fields = (String) options.get("edit-template-fields"); 
     435    return fields == null ? false : fields.toLowerCase().equals("true"); 
    342436  } 
    343437 
    344438  /** Returns true if we can edit the OME-CA mapping on-the-fly. */ 
    345439  public boolean editMapping() { 
    346     return ((String) options.get("edit-mapping")).toLowerCase().equals("true"); 
     440    String mapping = (String) options.get("edit-mapping"); 
     441    return mapping == null ? false : mapping.toLowerCase().equals("true"); 
    347442  } 
    348443 
  • trunk/loci/ome/notebook/TemplateField.java

    r2513 r2629  
    5858  private JComponent component; 
    5959 
     60  /** Row and column in the layout grid. */ 
     61  private int row = -1, column = -1; 
     62 
    6063  // -- Constructors -- 
    6164 
     
    8083        else if (key.startsWith("type")) type = value;  
    8184        else if (key.startsWith("map")) omecaMap = value;  
     85        else if (key.startsWith("grid")) { 
     86          row = Integer.parseInt(value.substring(1, value.indexOf(","))); 
     87          column = Integer.parseInt(value.substring(value.indexOf(",") + 1,  
     88            value.length() - 1)); 
     89        } 
    8290        else if (key.startsWith("values")) { 
    8391          StringTokenizer e = new StringTokenizer(value, "\", "); 
     
    185193  public void setComponent(JComponent component) { this.component = component; } 
    186194 
     195  public int getRow() { return row; } 
     196 
     197  public void setRow(int row) { this.row = row; } 
     198 
     199  public int getColumn() { return column; } 
     200 
     201  public void setColumn(int column) { this.column = column; } 
     202 
    187203} 
  • trunk/loci/ome/notebook/TemplateTab.java

    r2513 r2629  
    4040  private Vector fields; 
    4141 
     42  /** Number of rows and columns in this tab. */ 
     43  private int rows, columns; 
     44 
    4245  // -- Constructor -- 
    4346 
     
    4851 
    4952  // -- TemplateTab API methods -- 
     53 
     54  public int getRows() { return rows; } 
     55 
     56  public void setRows(int rows) { this.rows = rows; } 
     57 
     58  public int getColumns() { return columns; } 
     59 
     60  public void setColumns(int columns) { this.columns = columns; } 
    5061 
    5162  public int getNumGroups() { return groups.size(); } 
     
    6576  } 
    6677 
     78  public TemplateField getField(int row, int col) { 
     79    for (int i=0; i<fields.size(); i++) { 
     80      TemplateField t = (TemplateField) fields.get(i); 
     81      if (t.getRow() == row && t.getColumn() == col) return t; 
     82    }  
     83    return null;  
     84  } 
     85 
    6786  public void addGroup(TemplateGroup g) { groups.add(g); } 
    6887 
Note: See TracChangeset for help on using the changeset viewer.