Changeset 1215


Ignore:
Timestamp:
08/02/06 20:29:03 (14 years ago)
Author:
chris
Message:

NEW - GotoEditor:
1) a class that manages the editing behavior of the
buttons in the "Goto" column

NEW - GotoRenderer:
1) a class that manages rendering buttons appropriately
in the "Goto" column of the tables

VariableComboEditor.java:
1) Massive overhaul that allows the tables to use
either a JTextField or a JComboBox depending on whether
the row is for a reference attribute
2) Egads, tables are not designed to do this at all
3) Added support for changing the xml nodes if the
editor is a JLabel (didn't work previously)

MetadataPane:
1) removed helper class TableButton, added it to
GotoEditor instead, as this makes more sense now
2) killed old handling of tableChanges that altered
the node tree changing, which is now in
VariableComboEditor.java
3) made MetadataPane independent of its frame
4) made the two tables in TablePanel into one --
this was disgustingly difficult.
5) added tooltip compatability to like everything

ClickableTable:
1) overrides of the getToolTipText method to allow
appropriate tool tips for the particular cell that
the mouse is over.

NotePanel:
1) fixed minor annoying bug that had to do with the
preferred size of notepanel being larger in width
than the rest of the tablepanel causing the tables
to resize when notepanels are displayed.

Template:
1) added more descriptions to handle the new tooltips

MetadataNotebook:
1) minor changes to handle new modularity of
MetadataPane, including constructor that doesn't need
a TemplateParser argument.

Location:
trunk/loci/ome/notebook
Files:
2 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/ome/notebook

    • Property svn:ignore
      •  

        old new  
        33*.xsd 
        44*.ome 
         5*.bat 
         6TestFrame.java 
         7*.old 
  • trunk/loci/ome/notebook/ClickableTable.java

    r1207 r1215  
    8686    ListSelectionModel rowSM = getSelectionModel(); 
    8787    rowSM.addListSelectionListener(new ListSelectionListener() { 
    88     public void valueChanged(ListSelectionEvent e) { 
    89             //Ignore extra messages. 
    90             if (e.getValueIsAdjusting()) return; 
    91          
    92             ListSelectionModel lsm = 
    93                 (ListSelectionModel)e.getSource(); 
    94             if (lsm.isSelectionEmpty()) { 
    95                 //no rows are selected 
    96             }  
    97             else { 
    98                 lsm.clearSelection(); 
    99                 //selectedRow is selected 
    100             } 
    101     } 
    102 }); 
    103  
    104   } 
     88      public void valueChanged(ListSelectionEvent e) { 
     89              //Ignore extra messages. 
     90                    if (e.getValueIsAdjusting()) return; 
     91                 
     92                    ListSelectionModel lsm = 
     93                        (ListSelectionModel)e.getSource(); 
     94                    if (lsm.isSelectionEmpty()) { 
     95                        //no rows are selected 
     96                    }  
     97                    else { 
     98                        lsm.clearSelection(); 
     99                        //selectedRow is selected 
     100                    } 
     101          } 
     102                }); 
     103  } 
     104   
     105  public String getToolTipText(MouseEvent e) { 
     106    String tip = null; 
     107    java.awt.Point p = e.getPoint(); 
     108    int rowIndex = rowAtPoint(p); 
     109    int colIndex = columnAtPoint(p); 
     110    int realColumnIndex = convertColumnIndexToModel(colIndex); 
     111 
     112    if (realColumnIndex == 0) { 
     113      TableModel model = getModel(); 
     114      String attrName = (String)model.getValueAt(rowIndex,0); 
     115      Vector v = DOMUtil.getChildElements("OMEAttribute", tp.el); 
     116      Element thisEle = null; 
     117      for(int i = 0;i < v.size();i++) { 
     118        Element tempEle = (Element) v.get(i); 
     119        if (tempEle.hasAttribute("Name")) { 
     120          if (tempEle.getAttribute("Name").equals(attrName)) 
     121            thisEle = tempEle; 
     122        } 
     123        else if (tempEle.getAttribute("XMLName").equals(attrName)) 
     124          thisEle = tempEle; 
     125      } 
     126       
     127      if (thisEle.hasAttribute("ShortDesc")) 
     128        tip = thisEle.getAttribute("ShortDesc"); 
     129      else if (thisEle.hasAttribute("Description")) 
     130        tip = thisEle.getAttribute("Description"); 
     131      else tip = super.getToolTipText(e); 
     132    } 
     133/* Removed this because it was annoying when trying to change values 
     134    else if (realColumnIndex == 1) { 
     135      String attrName = (String)getModel().getValueAt(rowIndex,0); 
     136      tip = "The value associated with this " + attrName + "."; 
     137    } 
     138*/ 
     139    else { //another column 
     140      tip = super.getToolTipText(e); 
     141    } 
     142    return tip; 
     143  } 
     144 
    105145   
    106146  // -- Static ClickableTable API Methods -- 
     
    179219       
    180220      //add the menuitems to the popup menu, add logical separators 
    181       jPop.add(infoItem); 
     221      jPop.add(addItem); 
     222      jPop.add(bigRemItem); 
    182223      JSeparator sep = new JSeparator(); 
    183224      jPop.add(sep); 
     
    185226      JSeparator sep2 = new JSeparator(); 
    186227      jPop.add(sep2); 
    187       jPop.add(addItem); 
    188       jPop.add(bigRemItem); 
     228      jPop.add(infoItem); 
    189229      jPop.show(this, e.getX(), e.getY()); 
    190230    } 
  • trunk/loci/ome/notebook/MetadataNotebook.java

    r1207 r1215  
    4949    TemplateParser tp = new TemplateParser(f); 
    5050    //create a MetadataPane, where most everything happens 
    51     metadata = new MetadataPane(tp); 
     51     
     52    if( args.length > 0 ) { 
     53                        File file = null; 
     54      try { 
     55        file = new File(args[0]); 
     56      } 
     57      catch (Exception exc) { 
     58        System.out.println("Error occured: You suck."); 
     59      } 
     60      metadata = new MetadataPane(file); 
     61    } 
     62    else metadata = new MetadataPane(); 
    5263    setContentPane(metadata); 
    5364 
  • trunk/loci/ome/notebook/MetadataPane.java

    r1207 r1215  
    2828{ 
    2929  // -- Constants -- 
    30   protected static final String[] TREE_COLUMNS = {"Attribute", "Value"}; 
     30  protected static final String[] TREE_COLUMNS = {"Attribute", "Value", "Goto"}; 
    3131   
    3232  public static final ImageIcon DATA_BULLET =  
     
    4040  // -- Fields -- 
    4141 
    42   /** Table model for attributes table*/ 
    43   DefaultTableModel myTableModel; 
    44  
    4542  /** Pane containing XML tree. */ 
    4643  protected JTabbedPane tabPane; 
     
    8279 
    8380  /** Constructs widget for displaying OME-XML metadata. */ 
    84   public MetadataPane(TemplateParser tp) { 
     81  public MetadataPane() { 
    8582 
    8683    // -- General Field Initialization -- 
     
    8986    panelsWithID = new Vector(); 
    9087    addItems = new Vector(); 
    91     tParse = tp; 
     88    File f = new File("Template.xml"); 
     89    tParse = new TemplateParser(f); 
    9290    thisOmeNode = null; 
    9391    internalDefs = null; 
     
    125123    rawPanel.setVisible(false); 
    126124    add(rawPanel); 
     125  } 
     126   
     127  public MetadataPane(File f) 
     128  { 
     129    this(); 
     130    setOMEXML(f); 
    127131  } 
    128132 
     
    255259      JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
    256260      String desc = tabList[i].getAttribute("Description"); 
    257       if (desc.length() == 0) tabPane.addTab(thisName, null, scrollPane, null); 
    258       else tabPane.addTab(thisName, null, scrollPane, desc); 
     261      if (desc.length() == 0) tabPane.addTab(thisName, NO_DATA_BULLET, 
     262        scrollPane, null); 
     263      else tabPane.addTab(thisName, NO_DATA_BULLET, scrollPane, desc); 
    259264      int keyNumber = getKey(i+1); 
    260265      if(keyNumber !=0 ) tabPane.setMnemonicAt(i, keyNumber); 
     
    424429    //change the "Tabs" menu in the original window to reflect the actual tabs 
    425430    //created (duplicate tabs are the reason for this) 
    426     MetadataNotebook mn = (MetadataNotebook) getTopLevelAncestor(); 
    427     mn.changeTabMenu(tabNames); 
     431    if (getTopLevelAncestor() instanceof MetadataNotebook) { 
     432      MetadataNotebook mn = (MetadataNotebook) getTopLevelAncestor(); 
     433      mn.changeTabMenu(tabNames); 
     434    } 
    428435 
    429436    //Makes sure that the external references do not mirror the internal ones 
     
    559566                      } 
    560567                      catch (Exception exc) { 
    561                         System.out.println(exc.toString()); 
     568//                      System.out.println(exc.toString()); 
    562569                      } 
    563570                      if (n == null) { 
     
    594601      for (int i = 0;i<iHoldTables.size();i++) { 
    595602        row = row + 2; 
    596                                 if (i == 0) builder.add( (Component)iHoldTables.get(i), cc.xyw(2, row, 2)); 
    597                                 else builder.add( (Component)iHoldTables.get(i), cc.xyw(3, row, 2)); 
     603                                if (i == 0) builder.add( (Component)iHoldTables.get(i), cc.xyw(2, row, 2, "left,center")); 
     604                                else builder.add( (Component)iHoldTables.get(i), cc.xyw(3, row, 2, "left,center")); 
    598605      } 
    599606       
     
    759766    }                    
    760767    catch (Exception exc) { 
    761       System.out.println(exc.toString()); 
     768//      System.out.println(exc.toString()); 
    762769    } 
    763770    if (caNode != null && n == null) n = new AttributeNode(caNode, unknownName); 
     
    860867  } 
    861868 
    862 /** Helper class to handle the "GOTO" buttons that take you to a particular 
    863 *   Element ID's representation in the program. 
    864 */ 
    865   public class TableButton extends JButton { 
    866     public JTable table; 
    867     public int whichRow; 
    868  
    869     public TableButton( JTable jt, int i) { 
    870       super("Goto"); 
    871       table = jt; 
    872       whichRow = i; 
    873       Integer aInt = new Integer(i); 
    874       setActionCommand("goto"); 
    875       setPreferredSize(new Dimension(70, 15)); 
    876     } 
    877   } 
    878  
    879869/** Helper class to handle the various TablePanels that will be created to 
    880870*   display the attributes of Elements that have no nested Elements 
    881871*/ 
    882872  public class TablePanel extends JPanel 
    883     implements TableModelListener, ActionListener 
     873    implements ActionListener 
    884874  { 
    885875    public OMEXMLNode oNode; 
     
    888878    public String id; 
    889879    public String name; 
    890     public JTable newTable, refTable; 
     880    public JTable table; 
    891881    public Element el; 
    892882    public boolean isTopLevel; 
    893883    private JButton noteButton; 
     884    protected Vector attrList, refList; 
    894885 
    895886    public TablePanel(Element e, TabPanel tp, OMEXMLNode on) { 
     
    911902      tPanel = tp; 
    912903      id = null; 
    913       newTable = null; 
    914       refTable = null; 
    915904      JComboBox comboBox = null; 
    916905      if (on != null) name = getTreePathName(e,on); 
     
    920909 
    921910      Vector fullList = DOMUtil.getChildElements("OMEAttribute",e); 
    922       Vector attrList = new Vector(); 
    923       Vector refList = new Vector(); 
     911      attrList = new Vector(); 
     912      refList = new Vector(); 
    924913      for(int i = 0;i<fullList.size();i++) { 
    925914        Element thisE = (Element) fullList.get(i); 
     
    949938      Element cDataEl = DOMUtil.getChildElement("CData",e); 
    950939      if (cDataEl != null) attrList.add(0,cDataEl); 
    951  
    952       JPanel lowPanel = new JPanel(); 
    953        
    954       FormLayout layout = new FormLayout( 
    955         "pref, 10dlu, pref:grow, pref", 
    956         "pref,2dlu,pref,pref,pref,3dlu,pref,3dlu"); 
    957       PanelBuilder builder = new PanelBuilder(layout); 
    958       CellConstraints cc = new CellConstraints(); 
    959940       
    960941      JLabel tableName = null; 
    961       if(oNode == null) tableName = new JLabel(thisName, NO_DATA_BULLET, JLabel.LEFT); 
     942      if(oNode == null) tableName =  
     943        new JLabel(thisName, NO_DATA_BULLET, JLabel.LEFT); 
    962944      else tableName = new JLabel(thisName, DATA_BULLET, JLabel.LEFT); 
    963945      Font thisFont = tableName.getFont(); 
    964946      thisFont = new Font(thisFont.getFontName(), 
    965       Font.BOLD,thisFont.getSize()); 
     947        Font.BOLD,thisFont.getSize()); 
    966948      tableName.setFont(thisFont); 
     949      if (el.hasAttribute("ShortDesc")) 
     950        tableName.setToolTipText(el.getAttribute("ShortDesc")); 
     951      else if (el.hasAttribute("Description")) 
     952        tableName.setToolTipText(el.getAttribute("Description")); 
     953       
     954                        JButton addButton = new JButton("Make New"); 
     955      addButton.setPreferredSize(new Dimension(95,17)); 
     956      addButton.addActionListener(this); 
     957      addButton.setActionCommand("Make"); 
     958      addButton.setToolTipText("Create a new " + name + " table."); 
     959      if ( !isTopLevel && tPanel.oNode == null) addButton.setEnabled(false); 
     960       
     961      noteButton = new JButton("Notes"); 
     962      noteButton.setPreferredSize(new Dimension(85,17)); 
     963      noteButton.addActionListener(this); 
     964      noteButton.setActionCommand("getNotes"); 
     965      noteButton.setToolTipText( 
     966        "Display or hide the notes associated with this " + name + "."); 
     967       
     968      DefaultTableModel myTableModel =  
     969        new DefaultTableModel(TREE_COLUMNS, 0) 
     970      { 
     971        public boolean isCellEditable(int row, int col) { 
     972          if(col < 1) return false; 
     973          else return true; 
     974        } 
     975      }; 
     976       
     977      FormLayout layout = new FormLayout( 
     978        "pref, 10dlu, pref, pref:grow, pref", 
     979        "pref,2dlu,pref,pref,3dlu,pref,3dlu"); 
     980      PanelBuilder builder = new PanelBuilder(layout); 
     981      CellConstraints cc = new CellConstraints(); 
     982       
     983      table = new ClickableTable(myTableModel, this); 
     984      table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF ); 
     985      table.getColumnModel().getColumn(0).setPreferredWidth(125); 
     986      table.getColumnModel().getColumn(1).setPreferredWidth(430); 
     987      table.getColumnModel().getColumn(2).setPreferredWidth(70); 
     988      JTableHeader tHead = table.getTableHeader(); 
     989      tHead.setResizingAllowed(true); 
     990      tHead.setReorderingAllowed(true); 
     991      myTableModel.setRowCount(attrList.size() + refList.size()); 
     992       
     993        builder.add(tableName, cc.xy(1,1)); 
     994                        builder.add(noteButton, cc.xy(3,1, "left,center")); 
     995                        builder.add(addButton, cc.xyw(5,1,1, "right,center")); 
     996                        builder.add(tHead, cc.xyw(1,3,5)); 
     997                        builder.add(table, cc.xyw(1,4,5, "fill, center")); 
     998                         
     999                        if (oNode == null) { 
     1000        tHead.setVisible(false); 
     1001        noteButton.setVisible(false); 
     1002        table.setVisible(false); 
     1003      } 
    9671004 
    9681005      if (attrList.size() != 0) { 
    969         myTableModel = new DefaultTableModel(TREE_COLUMNS, 0) { 
    970           public boolean isCellEditable(int row, int col) { 
    971             if(col < 1) return false; 
    972             else return true; 
    973           } 
    974         }; 
    975  
    976         myTableModel.addTableModelListener(this); 
    977  
    978         setLayout(new GridLayout(0,1)); 
    979  
    980         newTable = new ClickableTable(myTableModel, this); 
    981         newTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);  
    982         newTable.getColumnModel().getColumn(0).setPreferredWidth(125); 
    983         newTable.getColumnModel().getColumn(1).setPreferredWidth(500); 
    984         newTable.getColumnModel().getColumn(0).setMinWidth(125); 
    985         JTableHeader tHead = newTable.getTableHeader(); 
    986         tHead.setResizingAllowed(false); 
    987         tHead.setReorderingAllowed(false); 
    988         noteButton = new JButton("Notes"); 
    989         noteButton.setPreferredSize(new Dimension(85,15)); 
    990         noteButton.addActionListener(this); 
    991         noteButton.setActionCommand("getNotes"); 
    992         JButton addButton = new JButton("Make New"); 
    993         addButton.setPreferredSize(new Dimension(85,15)); 
    994         addButton.addActionListener(this); 
    995         addButton.setActionCommand("Make"); 
    996         if ( !isTopLevel && tPanel.oNode == null) addButton.setEnabled(false);         
    997          
    998                                 builder.add(tableName, cc.xy(1,1)); 
    999                                 builder.add(noteButton, cc.xy(3,1, "left,center")); 
    1000                                 builder.add(addButton, cc.xyw(3,1, 2, "right,center")); 
    1001                                 builder.add(tHead, cc.xyw(1,3,4)); 
    1002                                 builder.add(newTable, cc.xyw(1,4,4)); 
    1003                                  
    1004                           if (oNode == null) { 
    1005           tHead.setVisible(false); 
    1006           noteButton.setVisible(false); 
    1007           newTable.setVisible(false); 
    1008         } 
    1009  
    10101006        // update OME-XML attributes table 
    1011         myTableModel.setRowCount(attrList.size()); 
    10121007        for (int i=0; i<attrList.size(); i++) { 
    10131008          Element thisEle = null; 
     
    10261021              } 
    10271022            } 
    1028             else if (thisEle.hasAttribute("XMLName")) { 
     1023            else if (!thisEle.hasAttribute("Name") && 
     1024              thisEle.hasAttribute("XMLName")) { 
    10291025              myTableModel.setValueAt(thisEle.getAttribute("XMLName"), i, 0); 
    10301026              if(oNode != null) { 
     
    10511047              } 
    10521048            } 
     1049             
    10531050          } 
    10541051        } 
    10551052      } 
    10561053 
    1057       if (refList.size() > 0) { 
    1058         myTableModel = new DefaultTableModel(TREE_COLUMNS, 0) { 
    1059           public boolean isCellEditable(int row, int col) { 
    1060             if(col < 1) return false; 
    1061             else return true; 
    1062           } 
    1063         }; 
    1064  
    1065         myTableModel.addTableModelListener(this); 
    1066  
    1067         refTable = new ClickableTable(myTableModel, this); 
    1068         refTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);  
    1069         refTable.getColumnModel().getColumn(0).setPreferredWidth(125); 
    1070         refTable.getColumnModel().getColumn(1).setPreferredWidth(430); 
    1071         refTable.getColumnModel().getColumn(0).setMinWidth(125); 
    1072         TableColumn refColumn = refTable.getColumnModel().getColumn(1); 
    1073  
    1074         comboBox = new JComboBox(); 
    1075         refColumn.setCellEditor(new DefaultCellEditor(comboBox)); 
    1076  
    1077         JPanel buttonPanel; 
    1078         String rowString = ""; 
    1079         for (int i=0; i<refList.size(); i++) { 
    1080           rowString = rowString + "pref:grow, "; 
    1081         } 
    1082         rowString = rowString.substring(0,rowString.length()-2); 
    1083          
    1084         FormLayout layout2 = new FormLayout( 
    1085           "pref", 
    1086           rowString); 
    1087         PanelBuilder builder2 = new PanelBuilder(layout2); 
    1088         CellConstraints cc2 = new CellConstraints(); 
    1089  
    1090         myTableModel.setRowCount(refList.size()); 
     1054      if (refList.size() > 0) {       
    10911055        for (int i=0; i<refList.size(); i++) { 
    10921056          Element thisEle = null; 
     
    10961060          if (thisEle != null) { 
    10971061            if (thisEle.hasAttribute("Name")) { 
    1098               myTableModel.setValueAt(thisEle.getAttribute("Name"), i, 0); 
     1062              myTableModel.setValueAt(thisEle.getAttribute("Name"),  
     1063                i + attrList.size(), 0); 
    10991064            } 
    11001065            else if (thisEle.hasAttribute("XMLName")) { 
    1101               myTableModel.setValueAt(thisEle.getAttribute("XMLName"), i, 0); 
     1066              myTableModel.setValueAt(thisEle.getAttribute("XMLName"),  
     1067                i + attrList.size(), 0); 
    11021068            } 
    11031069          } 
    1104           TableButton tb = new TableButton(refTable,i); 
    1105           tb.addActionListener(this); 
    1106           builder2.add(tb, cc2.xy(1,i+1, "center,fill")); 
    1107         } 
    1108          
    1109         buttonPanel = builder2.getPanel(); 
    1110  
    1111         if(attrList.size() == 0) { 
    1112           JTableHeader tHead = refTable.getTableHeader(); 
    1113           tHead.setResizingAllowed(false); 
    1114           tHead.setReorderingAllowed(false); 
    1115           noteButton = new JButton("Notes"); 
    1116           noteButton.setPreferredSize(new Dimension(85,15)); 
    1117           noteButton.addActionListener(this); 
    1118           noteButton.setActionCommand("getNotes"); 
    1119           JButton addButton = new JButton("Make New"); 
    1120           addButton.setPreferredSize(new Dimension(85,15)); 
    1121           addButton.addActionListener(this); 
    1122           addButton.setActionCommand("Make"); 
    1123           if (!isTopLevel && tPanel.oNode == null) addButton.setEnabled(false); 
    1124          
    1125                                 builder.add(tableName, cc.xy(1,1)); 
    1126                                 builder.add(noteButton, cc.xy(3,1, "left,center")); 
    1127                                 builder.add(addButton, cc.xyw(3,1,2, "right,center")); 
    1128                                   builder.add(tHead, cc.xyw(1,3,3)); 
    1129           builder.add(refTable, cc.xyw(1,4,3)); 
    1130           builder.add(buttonPanel, cc.xy(4,4)); 
    1131           if (oNode == null) { 
    1132             tHead.setVisible(false); 
    1133             noteButton.setVisible(false); 
    1134             refTable.setVisible(false); 
    1135             buttonPanel.setVisible(false); 
     1070        }  
     1071      } 
     1072       
     1073      noteP = new NotePanel(this); 
     1074      builder.add(noteP, cc.xyw(1,6,5, "fill,center")); 
     1075      setNumNotes(noteP.getNumNotes()); 
     1076       
     1077      add(builder.getPanel()); 
     1078    } 
     1079 
     1080    public void setEditor() { 
     1081      if(table != null) { 
     1082        TableModel model = table.getModel(); 
     1083        TableColumn refColumn = table.getColumnModel().getColumn(1); 
     1084        for(int i = 0;i < table.getRowCount();i++) { 
     1085          if ( i < attrList.size()) { 
    11361086          } 
    1137         } 
    1138         else { 
    1139                                         builder.add(refTable, cc.xyw(1,5,3)); 
    1140           builder.add(buttonPanel, cc.xy(4,5, "center,fill")); 
    1141           if (oNode == null) { 
    1142             refTable.setVisible(false); 
    1143             buttonPanel.setVisible(false); 
    1144           } 
    1145         }       
    1146       } 
    1147        
    1148       noteP = new NotePanel(this); 
    1149       builder.add(noteP, cc.xyw(1,7,4, "fill,center")); 
    1150       setNumNotes(noteP.getNumNotes()); 
    1151        
    1152       add(builder.getPanel()); 
    1153     } 
    1154  
    1155     public void setEditor() { 
    1156       if(refTable != null) { 
    1157         TableModel model = refTable.getModel(); 
    1158         TableColumn refColumn = refTable.getColumnModel().getColumn(1); 
    1159         for(int i = 0;i < refTable.getRowCount();i++) { 
    1160           boolean isLocal = false; 
    1161           String attrName = (String) model.getValueAt(i,0); 
    1162           String value = null; 
    1163           if(oNode != null) value = oNode.getAttribute(attrName); 
    1164           for(int j = 0;j < panelsWithID.size();j++) { 
    1165             TablePanel tp = (TablePanel) panelsWithID.get(j); 
    1166             if (tp.id != null && value != null) { 
    1167               if (value.equals(tp.id)) { 
    1168                 isLocal = true; 
    1169                 model.setValueAt(tp.name,i,1); 
    1170               } 
    1171             } 
    1172           } 
    1173           if(!isLocal && value != null && !value.equals("")) { 
    1174             model.setValueAt("(External) " + value,i,1); 
    1175           } 
     1087          else { 
     1088                  boolean isLocal = false; 
     1089                  String attrName = (String) model.getValueAt(i,0); 
     1090                  String value = null; 
     1091                  if(oNode != null) value = oNode.getAttribute(attrName); 
     1092                  for(int j = 0;j < panelsWithID.size();j++) { 
     1093                    TablePanel tp = (TablePanel) panelsWithID.get(j); 
     1094                    if (tp.id != null && value != null) { 
     1095                      if (value.equals(tp.id)) { 
     1096                        isLocal = true; 
     1097                        model.setValueAt(tp.name,i,1); 
     1098                      } 
     1099                    } 
     1100                  } 
     1101                  if(!isLocal && value != null && !value.equals("")) { 
     1102                    model.setValueAt("(External) " + value,i,1); 
     1103                  } 
     1104                  //makes the initial value non-null to display the buttons 
     1105                  model.setValueAt("foobar", i, 2); 
     1106                } 
    11761107        } 
    11771108 
    11781109        refColumn.setCellEditor(new VariableComboEditor(panelsWithID, 
    1179           addItems, oNode, internalDefs)); 
     1110          addItems, this, internalDefs)); 
     1111        TableColumn gotoColumn = table.getColumnModel().getColumn(2); 
     1112        gotoColumn.setCellEditor(new GotoEditor(this)); 
     1113        gotoColumn.setCellRenderer(new GotoRenderer()); 
    11801114      } 
    11811115    } 
     
    11861120 
    11871121    public void actionPerformed(ActionEvent e) { 
    1188       if (e.getSource() instanceof TableButton) { 
    1189         TableButton tb = (TableButton) e.getSource(); 
     1122      if (e.getSource() instanceof GotoEditor.TableButton) { 
     1123        GotoEditor.TableButton tb = (GotoEditor.TableButton) e.getSource(); 
    11901124        JTable jt = tb.table; 
    11911125 
    11921126        TableModel model = jt.getModel(); 
    11931127        Object obj = model.getValueAt(tb.whichRow, 1); 
    1194         String aName = obj.toString(); 
    1195         TablePanel aPanel = null; 
    1196  
    1197         int whichNum = -23; 
    1198  
    1199         for(int i = 0;i<panelsWithID.size();i++) { 
    1200           aPanel = (TablePanel) panelsWithID.get(i); 
    1201           if (aPanel.name.equals(aName)) whichNum = i; 
    1202         } 
    1203  
    1204         if(whichNum != -23) { 
    1205           TablePanel tablePan = (TablePanel) panelsWithID.get(whichNum); 
    1206           TabPanel tp = tablePan.tPanel; 
    1207           Container anObj = (Container) tp; 
    1208           while(!(anObj instanceof JScrollPane)) { 
    1209             anObj = anObj.getParent(); 
    1210           } 
    1211           JScrollPane jScr = (JScrollPane) anObj; 
    1212           while(!(anObj instanceof JTabbedPane)) { 
    1213             anObj = anObj.getParent(); 
    1214           } 
    1215           JTabbedPane jTabP = (JTabbedPane) anObj; 
    1216           jTabP.setSelectedComponent(jScr); 
    1217           Point loc = tablePan.getLocation(); 
    1218           loc.x = 0; 
    1219           loc.y = tp.titlePanel.getHeight() + loc.y; 
    1220           jScr.getViewport().setViewPosition(loc); 
    1221         } 
    1222         else { 
    1223           JOptionPane.showMessageDialog((Frame) getTopLevelAncestor(), 
    1224             "Since the ID in question refers to something\n" + 
    1225             "outside of this file, you cannot \"Goto\" it.", 
    1226             "External Reference Detected", JOptionPane.WARNING_MESSAGE); 
    1227         } 
     1128        if(obj != null && !obj.toString().equals("")) { 
     1129                String aName = obj.toString(); 
     1130                TablePanel aPanel = null; 
     1131         
     1132                int whichNum = -23; 
     1133         
     1134                for(int i = 0;i<panelsWithID.size();i++) { 
     1135                  aPanel = (TablePanel) panelsWithID.get(i); 
     1136                  if (aPanel.name.equals(aName)) whichNum = i; 
     1137                } 
     1138         
     1139                if(whichNum != -23) { 
     1140                  TablePanel tablePan = (TablePanel) panelsWithID.get(whichNum); 
     1141                  TabPanel tp = tablePan.tPanel; 
     1142                  Container anObj = (Container) tp; 
     1143                  while(!(anObj instanceof JScrollPane)) { 
     1144                    anObj = anObj.getParent(); 
     1145                  } 
     1146                  JScrollPane jScr = (JScrollPane) anObj; 
     1147                  while(!(anObj instanceof JTabbedPane)) { 
     1148                    anObj = anObj.getParent(); 
     1149                  } 
     1150                  JTabbedPane jTabP = (JTabbedPane) anObj; 
     1151                  jTabP.setSelectedComponent(jScr); 
     1152                  Point loc = tablePan.getLocation(); 
     1153                  loc.x = 0; 
     1154                  loc.y = tp.titlePanel.getHeight() + loc.y; 
     1155                  jScr.getViewport().setViewPosition(loc); 
     1156                } 
     1157                else { 
     1158                  JOptionPane.showMessageDialog((Frame) getTopLevelAncestor(), 
     1159                    "Since the ID in question refers to something\n" + 
     1160                    "outside of this file, you cannot \"Goto\" it.", 
     1161                    "External Reference Detected", JOptionPane.WARNING_MESSAGE); 
     1162                } 
     1163              } 
     1164              else { 
     1165                JOptionPane.showMessageDialog((Frame) getTopLevelAncestor(), 
     1166                    "Since the ID in question is currently blank,\n" + 
     1167                    "you cannot \"Goto\" it.", 
     1168                    "Null Reference Detected", JOptionPane.WARNING_MESSAGE); 
     1169              } 
    12281170      } 
    12291171      else if(e.getActionCommand().equals("getNotes")) { 
     
    12881230            } 
    12891231    } 
    1290  
    1291     public void tableChanged(TableModelEvent e) { 
    1292       int column = e.getColumn(); 
    1293       if (e.getType() == TableModelEvent.UPDATE && column == 1 && 
    1294         ((TableModel) e.getSource()) == newTable.getModel()) 
    1295       { 
    1296         int row = e.getFirstRow(); 
    1297         TableModel model = (TableModel) e.getSource(); 
    1298         String data = (String) model.getValueAt(row, column); 
    1299         String attr = (String) model.getValueAt(row,0); 
    1300         if ( oNode != null && data != null && data != "") { 
    1301           if (attr.endsWith("CharData") ) { 
    1302             DOMUtil.setCharacterData(data, oNode.getDOMElement()); 
    1303           } 
    1304           else { 
    1305             oNode.setAttribute(attr, data); 
    1306           } 
    1307         } 
    1308       } 
    1309     } 
    13101232     
    13111233    public void callReRender() { 
  • trunk/loci/ome/notebook/NotePanel.java

    r1207 r1215  
    5454    textArea.getDocument().addDocumentListener(noteList); 
    5555    JScrollPane jNoteScroll = new JScrollPane(textArea); 
    56     jNoteScroll.setPreferredSize(new Dimension(465,100)); 
     56    jNoteScroll.setPreferredSize(new Dimension(450,100)); 
    5757    jNoteScroll.setVerticalScrollBarPolicy( 
    5858      JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
  • trunk/loci/ome/notebook/Samples

    • Property svn:ignore
      •  

        old new  
        22*.ome 
        33*.tmp 
         4*.xml 
  • trunk/loci/ome/notebook/Template.xml

    r1199 r1215  
    11<?xml version="1.0" ?> 
    22<NotebookTemplate Version="1.0"> 
    3         <OMEElement XMLName="Project" Description="Name of this project."> 
     3        <OMEElement XMLName="Project" Description="Data having to do with this project."> 
    44            <OMEAttribute XMLName="ID"  Type="ID"/> 
    55                <OMEAttribute XMLName="Name"  Description="The name of this project."/> 
     
    2020                <OMEAttribute XMLName="Experimenter" Type="Ref" Description="Refers to the experimenter associated with this image."/> 
    2121                <OMEAttribute XMLName="DefaultPixels" Type="Ref" Description="Refers to the pixels that are in this image."/> 
    22                 <OMEElement XMLName="LogicalChannel" Description=""> 
     22                <OMEElement XMLName="LogicalChannel" Description="The Channel associated with this image."> 
    2323                        <OMEAttribute XMLName="ID"  Type="ID"/> 
    2424                        <OMEAttribute XMLName="Name" Description="The name of this LogicalChannel."/> 
     
    2828                        <OMEAttribute XMLName="Filter" Type="Ref" Description="Refers to the filter used in this LogicalChannel."/> 
    2929                </OMEElement> 
    30                 <OMEElement XMLName="Pixels" Description=""> 
     30                <OMEElement XMLName="Pixels" Description="The Pixels associated with this element."> 
    3131                        <OMEAttribute XMLName="ID" Type="ID"/> 
    3232                        <OMEAttribute XMLName="SizeX" Description="The x coordinate size of these pixels."/> 
     
    3737                        <OMEAttribute XMLName="PixelType" Description="Describes the type of pixels used."/> 
    3838                </OMEElement> 
    39                 <OMEElement XMLName="LaserCoordinates" Description=""> 
     39                <OMEElement XMLName="LaserCoordinates" Description="The coordinates of the laser."> 
    4040                        <OMEAttribute XMLName="ID" Type="ID"/> 
    4141                        <OMEAttribute XMLName="Laser" Type="Ref" Description="The laser refered to by these coordinates."/> 
  • trunk/loci/ome/notebook/VariableComboEditor.java

    r1194 r1215  
    1818import javax.swing.JComboBox; 
    1919import javax.swing.JTable; 
     20import javax.swing.JTextField; 
     21import javax.swing.text.DefaultStyledDocument; 
    2022import javax.swing.table.TableModel; 
     23 
    2124import java.awt.Component; 
     25 
    2226import java.awt.event.ActionListener; 
    2327import java.awt.event.ActionEvent; 
     28import java.awt.event.FocusListener; 
     29import java.awt.event.FocusEvent; 
     30import java.awt.event.MouseListener; 
     31import java.awt.event.MouseEvent; 
     32 
     33import javax.swing.event.DocumentListener; 
     34import javax.swing.event.DocumentEvent; 
    2435 
    2536import java.util.Hashtable; 
     
    2738 
    2839import org.openmicroscopy.xml.OMEXMLNode; 
     40import org.openmicroscopy.xml.DOMUtil; 
     41import org.w3c.dom.Element; 
    2942 
    3043public class VariableComboEditor extends AbstractCellEditor 
    31   implements TableCellEditor, ActionListener { 
     44  implements TableCellEditor, ActionListener,  
     45  DocumentListener, FocusListener, MouseListener 
     46{ 
    3247 
    3348  // -- Fields -- 
     
    4055  //holds the table which uses this cell editor 
    4156  private OMEXMLNode oNode; 
     57   
     58  //refers to the TablePanel using this editor 
     59  private MetadataPane.TablePanel tableP; 
    4260 
    4361  //holds the current combobox needed when the cell is clicked 
    4462  private JRowBox box; 
     63   
     64  //holds the current label needed when a non-ref cell is clicked 
     65  private JTextField text; 
    4566 
    4667  //holds the table of references this cell editor is for 
     
    5071  //that is currently opened by MetadataPane 
    5172  private Hashtable iDefs; 
     73   
     74  private String result; 
    5275 
    5376  // -- Constants -- 
     
    6588  //    the current open file itself 
    6689  public VariableComboEditor(Vector IDP, Vector AddP,  
    67     OMEXMLNode oN, Hashtable internalDefs) 
     90    MetadataPane.TablePanel tp, Hashtable internalDefs) 
    6891  { 
    6992                //initialize all fields 
     93                result = null; 
    7094    idPanels = IDP; 
    7195    addPanels = AddP; 
    72     oNode = oN; 
     96    tableP = tp; 
     97    oNode = tp.oNode; 
    7398    box = new JRowBox(-1); 
     99    text = new JTextField(); 
    74100    iDefs = internalDefs; 
    75101  } 
     
    96122//Implement the one CellEditor method that AbstractCellEditor doesn't. 
    97123  public Object getCellEditorValue() { 
    98     return box.getSelectedItem(); 
     124    return result; 
    99125  } 
    100126 
     
    103129    boolean isSelected, int row, int column) 
    104130  { 
    105     //use parameters to get information about the cell being edited 
    106131    refTable = table; 
    107     JRowBox thisBox = new JRowBox(row); 
    108132    TableModel tModel = table.getModel(); 
    109     //tagname of the node associated with this table 
    110     String eleName = oNode.getDOMElement().getTagName(); 
    111     //name of the attribute being edited 
    112     String attrName = (String) tModel.getValueAt(row, 0); 
    113     //get the sub-hashtable for the key associated with this tablepanel's 
    114     //OMEXMLNode... check internal defs first, then external defs 
    115     Hashtable subHash = (Hashtable) iDefs.get(eleName); 
    116     if (subHash == null) subHash = (Hashtable) REF_HASH.get(eleName); 
    117     if (subHash != null) { 
    118       //get the string representation of the type this attribute should 
    119       //refer to 
    120       String type = (String) subHash.get(attrName); 
    121       if (type != null) { 
    122         //check the list of internal references for nodes of the 
    123         //type that we just found 
    124         for(int i = 0;i<idPanels.size();i++) { 
    125           MetadataPane.TablePanel tp = 
    126             (MetadataPane.TablePanel) idPanels.get(i); 
    127           String tpClass = tp.oNode.getClass().getName(); 
    128           boolean isCorrectType = 
    129             tpClass.equals("org.openmicroscopy.xml.st." + type + "Node"); 
    130           //if the node is of the right type, add it to the combobox 
    131           if (isCorrectType) thisBox.addItem(tp.name); 
    132         } 
    133  
    134          //check the list of external references for references of 
    135          //the appropriate type 
    136         for(int i = 0;i<addPanels.size();i++) { 
    137           String thisExID = (String) addPanels.get(i); 
    138           if (thisExID.indexOf(":" + type + ":") >= 0) { 
    139             //add this external reference to the combobox 
    140             thisBox.addItem(thisExID); 
    141           } 
    142         } 
    143       } 
    144       //if no type is found for this attribute, add all internal/external 
    145       //reference options to the combobox 
    146       else addAll(thisBox); 
    147     } 
    148     //if no attributes are found for this element, add all references  
    149     else addAll(thisBox); 
    150  
    151     //listen to changes in this combobox 
    152     thisBox.addActionListener(this); 
    153                 //set the initial item in the combobox based on the parameter "value" 
    154     thisBox.setSelectedItem(value); 
    155  
    156     return thisBox; 
    157   } 
     133   
     134    Vector fullList = DOMUtil.getChildElements("OMEAttribute",tableP.el); 
     135    Element templateE = null; 
     136    for (int i = 0;i<fullList.size();i++) { 
     137      Element thisE = (Element) fullList.get(i); 
     138      String nameAttr = thisE.getAttribute("XMLName"); 
     139      if(thisE.hasAttribute("Name")) nameAttr = thisE.getAttribute("Name"); 
     140      if(nameAttr.equals((String) tModel.getValueAt(row, 0))) templateE = thisE;       
     141    } 
     142     
     143    String cellType = null; 
     144    if(templateE.hasAttribute("Type")) cellType = templateE.getAttribute("Type"); 
     145     
     146    if (cellType == null) { 
     147      JTextField thisText = new JTextField(new RowDoc(row), (String) value, 1); 
     148      thisText.setEditable(true); 
     149      thisText.getDocument().addDocumentListener(this); 
     150      thisText.addFocusListener(this); 
     151      thisText.addMouseListener(this); 
     152      return thisText; 
     153    } 
     154    else { 
     155      if (cellType.equals("Ref")) { 
     156        //use parameters to get information about the cell being edited 
     157                    JRowBox thisBox = new JRowBox(row); 
     158                    thisBox.addFocusListener(this); 
     159                     
     160                    //tagname of the node associated with this table 
     161                    String eleName = oNode.getDOMElement().getTagName(); 
     162                    //name of the attribute being edited 
     163                    String attrName = (String) tModel.getValueAt(row, 0); 
     164                    //get the sub-hashtable for the key associated with this tablepanel's 
     165                    //OMEXMLNode... check internal defs first, then external defs 
     166                    Hashtable subHash = (Hashtable) iDefs.get(eleName); 
     167                    if (subHash == null) subHash = (Hashtable) REF_HASH.get(eleName); 
     168                    if (subHash != null) { 
     169                      //get the string representation of the type this attribute should 
     170                      //refer to 
     171                      String type = (String) subHash.get(attrName); 
     172                      if (type != null) { 
     173                        //check the list of internal references for nodes of the 
     174                        //type that we just found 
     175                        for(int i = 0;i<idPanels.size();i++) { 
     176                          MetadataPane.TablePanel tp = 
     177                            (MetadataPane.TablePanel) idPanels.get(i); 
     178                          String tpClass = tp.oNode.getClass().getName(); 
     179                          boolean isCorrectType = 
     180                            tpClass.equals("org.openmicroscopy.xml.st." + type + "Node"); 
     181                          //if the node is of the right type, add it to the combobox 
     182                          if (isCorrectType) thisBox.addItem(tp.name); 
     183                        } 
     184                 
     185                         //check the list of external references for references of 
     186                         //the appropriate type 
     187                        for(int i = 0;i<addPanels.size();i++) { 
     188                          String thisExID = (String) addPanels.get(i); 
     189                          if (thisExID.indexOf(":" + type + ":") >= 0) { 
     190                            //add this external reference to the combobox 
     191                            thisBox.addItem(thisExID); 
     192                          } 
     193                        } 
     194                      } 
     195                      //if no type is found for this attribute, add all internal/external 
     196                      //reference options to the combobox 
     197                      else addAll(thisBox); 
     198                    } 
     199                    //if no attributes are found for this element, add all references  
     200                    else addAll(thisBox); 
     201                 
     202                    //listen to changes in this combobox 
     203                    thisBox.addActionListener(this); 
     204                                //set the initial item in the combobox based on the parameter "value" 
     205                    thisBox.setSelectedItem(value); 
     206                 
     207                    return thisBox; 
     208      } 
     209      else return null; 
     210    } 
     211   } 
     212    
     213   public void setNode(int row, String value) { 
     214     TableModel tModel = refTable.getModel(); 
     215     String attrName = (String) tModel.getValueAt(row, 0); 
     216     if (value == null || value.equals("") ) { 
     217       if(oNode.getDOMElement().hasAttribute(attrName))  
     218         oNode.getDOMElement().removeAttribute(attrName); 
     219     } 
     220     else { 
     221             if (attrName.endsWith("CharData") ) { 
     222               DOMUtil.setCharacterData(value, oNode.getDOMElement()); 
     223             } 
     224             else oNode.setAttribute(attrName, value); 
     225     } 
     226   } 
    158227 
    159228// -- EventListener API -- 
    160229 
     230  //okay I know this gets ugly, but I didn't code tables to be this way! 
    161231  public void actionPerformed(ActionEvent e) { 
    162     //check if the action was done by a combobox 
    163232    if( e.getSource() instanceof JRowBox) { 
    164233      box = (JRowBox) e.getSource(); 
     
    173242      //set default of thisID as null 
    174243      String thisID = null; 
    175       if(data == null) oNode.setAttribute(attr,""); 
     244      if(data == null || data.equals("")) { 
     245        if(oNode.getDOMElement().hasAttribute(attr))  
     246          oNode.getDOMElement().removeAttribute(attr); 
     247      } 
    176248      else { 
    177249        //check if the selected item corresponds to an internal id 
     
    200272        } 
    201273      } 
     274      result = (String) box.getSelectedItem(); 
     275       
    202276      //let the table know that our editor is done with its 
    203277      //eeeeeevil deeds 
    204278      fireEditingStopped(); 
    205279    } 
    206   } 
    207  
     280    if (e.getSource() instanceof JTextField) { 
     281      text = (JTextField) e.getSource(); 
     282      try { 
     283        result = text.getDocument().getText(0,  
     284          text.getDocument().getLength()); 
     285      } 
     286      catch (Exception exc) {System.out.println(exc);} 
     287      System.out.println("Text Action: " + result); 
     288      fireEditingStopped(); 
     289    } 
     290  } 
     291   
     292  public void insertUpdate(DocumentEvent e) { 
     293    try { 
     294      result = e.getDocument().getText(0,  
     295        e.getDocument().getLength()); 
     296    } 
     297    catch (Exception exc) {System.out.println(exc);} 
     298    RowDoc rd = (RowDoc) e.getDocument(); 
     299    setNode(rd.row, result); 
     300  } 
     301   
     302  public void removeUpdate(DocumentEvent e) { 
     303    try { 
     304      result = e.getDocument().getText(0,  
     305        e.getDocument().getLength()); 
     306    } 
     307    catch (Exception exc) {System.out.println(exc);} 
     308    RowDoc rd = (RowDoc) e.getDocument(); 
     309    setNode(rd.row, result); 
     310  } 
     311   
     312  public void changedUpdate(DocumentEvent e) { 
     313    try { 
     314      result = e.getDocument().getText(0,  
     315        e.getDocument().getLength()); 
     316    } 
     317    catch (Exception exc) {System.out.println(exc);} 
     318    RowDoc rd = (RowDoc) e.getDocument(); 
     319    setNode(rd.row, result); 
     320  } 
     321   
     322  public void focusGained(FocusEvent e) { 
     323    if (e.getSource() instanceof JTextField) { 
     324      JTextField text = (JTextField) e.getSource(); 
     325      try { 
     326        result = text.getDocument().getText(0,  
     327          text.getDocument().getLength()); 
     328      } 
     329      catch (Exception exc) {System.out.println(exc);} 
     330    } 
     331    if (e.getSource() instanceof JRowBox) { 
     332      JRowBox thisBox = (JRowBox) e.getSource(); 
     333      result = (String) thisBox.getSelectedItem(); 
     334    } 
     335  } 
     336   
     337  public void focusLost(FocusEvent e) {} 
     338 
     339  public void mousePressed(MouseEvent e) { 
     340          if (e.getSource() instanceof JTextField && 
     341    e.getButton() == MouseEvent.BUTTON1) { 
     342                  JTextField text = (JTextField) e.getSource(); 
     343                  try { 
     344                    result = text.getDocument().getText(0,  
     345                      text.getDocument().getLength()); 
     346                  } 
     347                  catch (Exception exc) {System.out.println(exc);} 
     348          } 
     349          if (e.getSource() instanceof JRowBox && 
     350    e.getButton() == MouseEvent.BUTTON1) { 
     351                  JRowBox thisBox = (JRowBox) e.getSource(); 
     352      result = (String) thisBox.getSelectedItem(); 
     353          } 
     354        } 
     355         
     356  public void mouseReleased(MouseEvent e) {} 
     357  public void mouseClicked(MouseEvent e) {} 
     358  public void mouseEntered(MouseEvent e) {} 
     359  public void mouseExited(MouseEvent e) {} 
     360   
    208361// -- Helper Classes -- 
    209362 
     
    218371    } 
    219372  } 
     373   
     374  //very simple extension of Document (text) that simply adds an int 
     375  //field to designate which row this Document edits 
     376  public class RowDoc extends DefaultStyledDocument { 
     377    public int row; 
     378 
     379    public RowDoc (int r) { 
     380      super(); 
     381      row = r; 
     382    } 
     383  } 
    220384} 
Note: See TracChangeset for help on using the changeset viewer.