• Views
  • Iteration Report
  • My Iteration Report
  •  
OMERO.clients
  • Login
  • Help/Guide
  • About Trac
  • Preferences
  • Wiki
  • Timeline
  • Roadmap
  • Browse Source
  • View Tickets
  • Search

Context Navigation

  • ← Previous Changeset
  • Next Changeset →

Changeset 5543

Show
Ignore:
Timestamp:
07/17/08 16:32:21 (3 months ago)
Author:
will
Message:

Basically working JTree, with custom Rendering, Editing and Selection behavior

Location:
branches/OmeroEditor/src
Files:
19 added
3 removed
30 modified

  • fields/AbstractValueObject.java (added)
  • fields/DateTimeValueObject.java (added)
  • fields/DefaultFieldEditor.java (added)
  • fields/Field.java (modified) (1 diff)
  • fields/FieldPanel.java (added)
  • fields/FieldValueFactory.java (added)
  • fields/IField.java (added)
  • fields/IFieldValue.java (added)
  • fields/NoValue.java (added)
  • fields/TextValueObject.java (added)
  • tree/DataField.java (modified) (4 diffs)
  • tree/Tree.java (modified) (2 diffs)
  • treeEditingComponents (added)
  • treeEditingComponents/DateTimeField.java (added)
  • treeEditingComponents/EditingComponentFactory.java (added)
  • treeEditingComponents/TextFieldEditor.java (added)
  • treeModel/ContiguousChildSelectionModel.java (modified) (2 diffs)
  • treeModel/DynamicTreeDemo.java (deleted)
  • treeModel/FieldRenderer.java (modified) (4 diffs)
  • treeModel/MyBasicTreeUI.java (added)
  • treeModel/Tree.java (deleted)
  • treeModel/TreeEditorFactory.java (modified) (2 diffs)
  • treeModel/TreeUI.java (modified) (4 diffs)
  • ui/FieldEditorFormFieldFactory.java (modified) (3 diffs)
  • ui/FormDisplay.java (modified) (4 diffs)
  • ui/components/AttributeEditorListeners.java (modified) (4 diffs)
  • ui/components/AttributeTextEditor.java (modified) (3 diffs)
  • ui/components/OntologyTermSelector.java (modified) (3 diffs)
  • ui/formFields/FormField.java (deleted)
  • ui/formFields/FormFieldCheckBox.java (modified) (2 diffs)
  • ui/formFields/FormFieldContainer.java (modified) (3 diffs)
  • ui/formFields/FormFieldCustom.java (modified) (3 diffs)
  • ui/formFields/FormFieldDate.java (modified) (2 diffs)
  • ui/formFields/FormFieldDateTime.java (modified) (3 diffs)
  • ui/formFields/FormFieldDropDown.java (modified) (2 diffs)
  • ui/formFields/FormFieldFixed.java (modified) (1 diff)
  • ui/formFields/FormFieldImage.java (modified) (2 diffs)
  • ui/formFields/FormFieldLink.java (modified) (2 diffs)
  • ui/formFields/FormFieldMemo.java (modified) (2 diffs)
  • ui/formFields/FormFieldNumber.java (modified) (2 diffs)
  • ui/formFields/FormFieldOLS.java (modified) (1 diff)
  • ui/formFields/FormFieldObservation.java (modified) (2 diffs)
  • ui/formFields/FormFieldProtocol.java (modified) (2 diffs)
  • ui/formFields/FormFieldTable.java (modified) (3 diffs)
  • ui/formFields/FormFieldText.java (modified) (5 diffs)
  • ui/formFields/FormFieldTime.java (modified) (3 diffs)
  • uiComponents (added)
  • uiComponents/CompSizesReg.java (added)
  • uiComponents/DoubleDigitField.java (added)
  • uiComponents/DoubleDigitSpinner.java (added)
  • uiComponents/HrsMinsEditor.java (added)
  • util/DefaultExport.java (modified) (2 diffs)

Legend:

Unmodified
Added
Removed
  • branches/OmeroEditor/src/fields/Field.java

    r5536 r5543  
    2626import java.util.HashMap; 
    2727 
     28import tree.DataFieldConstants; 
    2829 
    29 public class Field { 
     30 
     31public class Field  
     32        implements IField { 
    3033 
    3134        HashMap<String, String> allAttributesMap; 
    3235         
     36        /** 
     37         * The "Value" of the field.  
     38         * This could be a simple string, or a mixture of dates, times etc.  
     39         * It represents the experimental parameters that are stored by this 
     40         * field.  
     41         */ 
     42        private IFieldValue fieldValue; 
     43         
    3344        public Field() { 
    34                 this("untitled", "no value"); 
     45                this("untitled", null, DataFieldConstants.FIXED_PROTOCOL_STEP); 
    3546        } 
    3647         
    37         public Field(String name, String value) { 
     48        public Field(String name, String value, String fieldType) { 
    3849                 
    3950                allAttributesMap = new HashMap<String, String>(); 
    4051                 
    41                 setAttribute("name", name); 
    42                 setAttribute("value", value); 
     52                fieldValue = FieldValueFactory.getFieldValue(fieldType); 
     53                 
     54                setAttribute(DataFieldConstants.ELEMENT_NAME, name); 
     55                setAttribute(DataFieldConstants.VALUE, value); 
    4356        } 
    4457         
    4558        public String getAttribute(String name) { 
     59                //System.out.println("Field getAttribute()"); 
     60                if (fieldValue.isValueAttribute(name)) { 
     61                        return fieldValue.getAttribute(name); 
     62                } 
     63                 
    4664                return allAttributesMap.get(name); 
    4765        } 
    4866         
    4967        public void setAttribute(String name, String value) { 
     68                System.out.println("Field setAttribute() " + name + " = " + value); 
     69                if (fieldValue.isValueAttribute(name)) { 
     70                        fieldValue.setAttribute(name, value); 
     71                } 
    5072                allAttributesMap.put(name, value); 
    5173        } 
    5274         
    5375        public String toString() { 
    54                 return getAttribute("name") + ": " + getAttribute("value"); 
     76                return getAttribute(DataFieldConstants.ELEMENT_NAME) + ": " +  
     77                getAttribute(DataFieldConstants.VALUE); 
     78        } 
     79 
     80        public boolean isAttributeTrue(String attributeName) { 
     81                String value = getAttribute(attributeName); 
     82                return DataFieldConstants.TRUE.equals(value); 
     83        } 
     84         
     85        public IFieldValue getValueObject() { 
     86                return fieldValue; 
     87        } 
     88         
     89        /** 
     90         * Gets the names of the attributes where this field stores its "value"s. 
     91         * This is used eg. (if a single value is returned) 
     92         * as the destination to copy the default value when defaults are loaded. 
     93         * Also used by EditClearFields to set all values back to null.  
     94         * This method delegates to the Value object for this field. 
     95         *   
     96         * @return      the names of the attributes that holds the "value" of this field 
     97         */ 
     98        public String[] getValueAttributes() { 
     99                return fieldValue.getValueAttributes(); 
     100        } 
     101         
     102        /** 
     103         * This method tests to see whether the field has been filled out.  
     104         * ie, Has the user entered a "valid" value into the Form.  
     105         * For fields that have a single 'value', this method will return true if  
     106         * that value is filled (not null).  
     107         * For fields with several attributes, it depends on what is considered 'filled'. 
     108         * This method can be used to check that 'Obligatory Fields' have been completed  
     109         * when a file is saved.  
     110         * Subclasses should override this method. 
     111         *  
     112         * @return      True if the field has been filled out by user. Required values are not null.  
     113         */ 
     114        public boolean isFieldFilled() { 
     115                return fieldValue.isFieldFilled(); 
    55116        } 
    56117} 
  • branches/OmeroEditor/src/tree/DataField.java

    r5511 r5543  
    3434import javax.swing.undo.UndoableEdit; 
    3535 
     36import fields.FieldPanel; 
     37 
    3638import tree.edit.EditDataFieldAttribute; 
    3739import tree.edit.EditDataFieldAttributes; 
    … …  
    3941import ui.FieldEditorFormFieldFactory; 
    4042import ui.fieldEditors.FieldEditor; 
    41 import ui.formFields.FormField; 
    4243 
    4344 
    … …  
    7273 
    7374        // the two JPanels that display the dataField, and hold optional attributes 
    74         FormField formField; 
     75        FieldPanel formField; 
    7576        FieldEditor fieldEditor; 
    7677         
    … …  
    296297                        getFormField(); 
    297298                 
    298                 formField.setHighlighted(highlighted); 
     299                formField.setSelected(highlighted); 
    299300        } 
    300301         
  • branches/OmeroEditor/src/tree/Tree.java

    r5521 r5543  
    4747import org.w3c.dom.NodeList; 
    4848 
     49import fields.FieldPanel; 
     50 
    4951import tree.edit.EditAddField; 
    5052import tree.edit.EditClearFields; 
    … …  
    6567import ui.XMLUpdateObserver; 
    6668import ui.fieldEditors.FieldEditor; 
    67 import ui.formFields.FormField; 
    6869import ui.formFields.FormFieldNumber; 
    6970import validation.XMLSchema; 
  • branches/OmeroEditor/src/treeModel/ContiguousChildSelectionModel.java

    r5527 r5543  
    8080   public void setSelectionPaths(TreePath[] pPaths) {  
    8181            
     82           //System.out.println("ContiguousChildSelectionModel   setSelectionPaths" + 
     83                //              "length = " + pPaths.length); 
    8284            
    8385           if (pPaths.length > 0) { 
    … …  
    184186           System.out.println("ContiguousChildSelectionModel   addSelectionPaths" + 
    185187                        "length = " + paths.length); 
     188            
    186189           /* 
    187190            * Check if any new paths have different parent  
    188191            */ 
    189192           TreePath[] currentPaths = this.getSelectionPaths(); 
     193           // if no selection, simple set the selection paths to the new paths 
     194           if ((currentPaths == null) || (currentPaths.length == 0)) { 
     195                   setSelectionPaths(paths); 
     196                   return; 
     197           } 
    190198           TreePath currentParent = currentPaths[0].getParentPath(); 
    191199            
  • branches/OmeroEditor/src/treeModel/FieldRenderer.java

    r5536 r5543  
    2323package treeModel; 
    2424 
     25//Java imports 
     26 
    2527import java.awt.Component; 
    2628 
    2729import javax.swing.Icon; 
     30import javax.swing.JLabel; 
    2831import javax.swing.JTree; 
     32import javax.swing.tree.DefaultMutableTreeNode; 
    2933import javax.swing.tree.DefaultTreeCellRenderer; 
    30 import javax.swing.tree.TreeCellRenderer; 
    31  
    32 import util.ImageFactory; 
    33  
    34 //Java imports 
    3534 
    3635//Third-party libraries 
    … …  
    3837//Application-internal dependencies 
    3938 
     39import fields.FieldPanel; 
     40import fields.IField; 
     41 
     42 
     43 
    4044/**  
     45 * The Renderer for JTree, to build the "Form" of hierarchical fields. 
    4146 *  
     47 * The getTreeCellRendererComponent() method returns a JPanel, which is  
     48 * used to build the Non-Editable tree UI (before editing starts).  
     49 * This JPanel is created by obtaining the UserObject for the node of 
     50 * the tree. If this is an instance of IField, it is used to create 
     51 * a JPanel. Otherwise it returns a JLabel.  
    4252 * 
    4353 * @author  William Moore &nbsp;&nbsp;&nbsp;&nbsp; 
    … …  
    5161public class FieldRenderer  
    5262        extends DefaultTreeCellRenderer { 
     63         
     64        public FieldRenderer() { 
     65                super(); 
     66        } 
    5367 
    5468        public Component getTreeCellRendererComponent(JTree tree, Object value, 
    … …  
    5670                        boolean hasFocus) { 
    5771                 
    58                         super.getTreeCellRendererComponent( 
    59                 tree, value, selected, 
    60                 expanded, leaf, row, 
    61                 hasFocus); 
    62                          
    63                         Icon bigIcon = ImageFactory.getInstance().getIcon( 
    64                                         ImageFactory.ALARM_ICON_64); 
    65                          
    66                         setIcon(bigIcon); 
    67                          
    68                         return this; 
     72                 
     73                if (value instanceof DefaultMutableTreeNode) { 
     74                        DefaultMutableTreeNode node = (DefaultMutableTreeNode)value; 
     75                        Object object = node.getUserObject(); 
     76                        if (object instanceof IField) { 
     77                                IField field = (IField)object; 
     78                                FieldPanel fieldPanel = new FieldPanel(field, tree, node); 
     79                                 
     80                                 
     81                                //fieldPanel.setTree(tree); 
     82                                //fieldPanel.setTreeNode(node); 
     83                                 
     84                                fieldPanel.setSelected(selected); 
     85                                 
     86                                return fieldPanel; 
     87                        } 
     88                } 
     89                 
     90                System.out.println(value.getClass()); 
     91                return new JLabel(value.toString()); 
    6992        } 
    7093         
     94        public Icon getLeafIcon() { 
     95                return null; 
     96        } 
     97         
     98        public Icon getOpenIcon() { 
     99                return null; 
     100        } 
     101         
     102        public Icon getClosedIcon() { 
     103                return null; 
     104        } 
     105         
     106        public int getIconTextGap() { 
     107                return 0; 
     108        } 
    71109 
    72110} 
  • branches/OmeroEditor/src/treeModel/TreeEditorFactory.java

    r5537 r5543  
    2828import javax.swing.tree.MutableTreeNode; 
    2929import javax.swing.tree.TreeNode; 
     30 
     31import tree.DataFieldConstants; 
    3032 
    3133import fields.Field; 
    … …  
    7880        public static TreeNode createDummyTree() { 
    7981                 
    80                 Field rootField = new Field("Title", "My Experiment"); 
     82                Field rootField = new Field(); 
     83                rootField.setAttribute(DataFieldConstants.ELEMENT_NAME, "Title"); 
    8184                DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(rootField); 
    8285                 
    83                 DefaultMutableTreeNode p1Name = new DefaultMutableTreeNode(new Field("Protocol", "10-2-08")); 
    84                 DefaultMutableTreeNode p2Name = new DefaultMutableTreeNode(new Field("Temperature", "37'C")); 
    85                 DefaultMutableTreeNode c1Name = new DefaultMutableTreeNode(new Field("Cells", "HeLa")); 
    86                 DefaultMutableTreeNode c2Name = new DefaultMutableTreeNode(new Field("DNA", "GFP-H2B")); 
    87                 DefaultMutableTreeNode c3Name = new DefaultMutableTreeNode(new Field("Incubation time", "3 hrs")); 
    88                 DefaultMutableTreeNode c4Name = new DefaultMutableTreeNode(new Field("On ice", "10 mins")); 
     86                Field field; 
     87                 
     88                DefaultMutableTreeNode p1Name = new DefaultMutableTreeNode( 
     89                                new Field("Protocol", "10-2-08", DataFieldConstants.TEXT_ENTRY_STEP)); 
     90                DefaultMutableTreeNode p2Name = new DefaultMutableTreeNode( 
     91                                new Field("Temperature", "37'C", DataFieldConstants.TEXT_ENTRY_STEP)); 
     92                 
     93                field = new Field("Date", null, DataFieldConstants.DATE_TIME_FIELD); 
     94                // field.setAttribute(DataFieldConstants.SECONDS, "3600"); 
     95                //field.setAttribute(DataFieldConstants.UTC_MILLISECS, "This is a test description"); 
     96                DefaultMutableTreeNode c1Name = new DefaultMutableTreeNode(field); 
     97                DefaultMutableTreeNode c2Name = new DefaultMutableTreeNode( 
     98                                new Field("DNA", null, DataFieldConstants.FIXED_PROTOCOL_STEP)); 
     99                DefaultMutableTreeNode c3Name = new DefaultMutableTreeNode( 
     100                                new Field("Incubation time", "3 hrs", DataFieldConstants.TEXT_ENTRY_STEP)); 
     101                DefaultMutableTreeNode c4Name = new DefaultMutableTreeNode( 
     102                                new Field("On ice", "10 mins", DataFieldConstants.TEXT_ENTRY_STEP)); 
     103                 
     104         
    89105         
    90106        rootNode.add(p1Name); 
  • branches/OmeroEditor/src/treeModel/TreeUI.java

    r5537 r5543  
    2323package treeModel; 
    2424 
     25//Java imports 
     26 
    2527import java.awt.BorderLayout; 
    2628 
     29import javax.swing.DefaultCellEditor; 
    2730import javax.swing.JPanel; 
    2831import javax.swing.JScrollPane; 
    2932import javax.swing.JTree; 
    30  
    31 //Java imports 
     33import javax.swing.tree.DefaultTreeCellEditor; 
     34import javax.swing.tree.DefaultTreeCellRenderer; 
     35import javax.swing.tree.TreeCellEditor; 
    3236 
    3337//Third-party libraries 
    … …  
    3539//Application-internal dependencies 
    3640 
     41import fields.DefaultFieldEditor; 
     42 
     43 
    3744/**  
     45 * This UI class displays a JTree in a scroll pane.  
    3846 *  
    3947 * 
    … …  
    4957        extends JPanel { 
    5058         
    51         private TreeModel model; 
    52          
    5359        private JTree tree; 
    5460         
    … …  
    5662                 
    5763                super(new BorderLayout()); 
    58                  
    59                 this.model = model; 
     64 
    6065                 
    6166                tree = new JTree(model); 
     67                /* 
     68                 * The default UI (BasicTreeUI) is replaced with a subclass 
     69                 * to modify the selection and editing behavior. 
     70                 */ 
     71                tree.setUI(new MyBasicTreeUI()); 
     72                 
     73                /* 
     74                 * A custom selection model allows multiple nodes to be selected, 
     75                 * but ensures that they are contiguous and are all siblings. 
     76                 */ 
    6277                tree.setSelectionModel(new ContiguousChildSelectionModel()); 
     78                 
     79                /* 
     80                 * Setting the row height to 0 allows each node to choose it's 
     81                 * own size. The JTree will call getPreferredSize() for each. 
     82                 */ 
    6383                tree.setRowHeight(0); 
    64                 tree.setCellRenderer(new FieldRenderer()); 
     84                 
     85                /* 
     86                 * A custom TreeCellRenderer (extends DefaultTreeCellRenderer) 
     87                 * renders nodes as JPanels. 
     88                 */ 
     89                DefaultTreeCellRenderer fieldRenderer = new FieldRenderer(); 
     90                tree.setCellRenderer(fieldRenderer); 
     91                 
     92                /* 
     93                 * A TreeCellEditor for editing fields. 
     94                 * This merely delegates to the fieldRenderer because the same  
     95                 * components are used for display and editing of the tree Cells. 
     96                 */ 
     97                TreeCellEditor fieldEditor = new DefaultFieldEditor(fieldRenderer); 
     98                /* 
     99                 * The DefaultTreeCellEditor (when passed a TreeCellEditor) uses this  
     100                 * to switch between editing and display.  
     101                 */ 
     102            TreeCellEditor editor = new DefaultTreeCellEditor(tree, fieldRenderer, fieldEditor); 
     103            tree.setCellEditor(editor); 
    65104                 
    66105                tree.setEditable(true); 
    67106                 
     107                /* 
     108                 * Place the JTree in a ScrollPane and add it to this panel.  
     109                 */ 
    68110                JScrollPane treeScroller = new JScrollPane(tree); 
    69                  
    70111                add(treeScroller, BorderLayout.CENTER); 
    71112        } 
     113 
    72114         
    73115} 
  • branches/OmeroEditor/src/ui/FieldEditorFormFieldFactory.java

    r5326 r5543  
    2323package ui; 
    2424 
     25import fields.FieldPanel; 
    2526import tree.DataField; 
    2627import tree.DataFieldConstants; 
    … …  
    4041import ui.fieldEditors.FieldEditorText; 
    4142import ui.fieldEditors.FieldEditorTime; 
    42 import ui.formFields.FormField; 
    4343import ui.formFields.FormFieldCheckBox; 
    4444import ui.formFields.FormFieldCustom; 
    … …  
    143143         
    144144        // FormField Factory 
    145         public FormField getFormField(DataField dataField) { 
    146                  
    147                 FormField formField = null; 
     145        public FieldPanel getFormField(DataField dataField) { 
     146                 
     147                FieldPanel formField = null; 
    148148                 
    149149                String inputType = dataField.getInputType(); 
  • branches/OmeroEditor/src/ui/FormDisplay.java

    r5362 r5543  
    3030import javax.swing.event.ChangeListener; 
    3131 
     32import fields.FieldPanel; 
     33 
    3234import tree.DataFieldConstants; 
    3335import tree.DataFieldNode; 
    34 import ui.formFields.FormField; 
    3536import ui.formFields.FormFieldContainer; 
    3637 
    … …  
    9394                         
    9495                         
    95                         FormField formField = (FormField)rootNode.getFormField(); 
     96                        FieldPanel formField = (FieldPanel)rootNode.getFormField(); 
    9697                        formField.setModel(model); 
    9798                        formField.refreshRootField(true);       // displays the correct buttons etc.  
    … …  
    111112                //System.out.println("FormDisplay: buildFormTree() " + dfNode.getDataField().getName()); 
    112113                 
    113                 boolean subStepsCollapsed = ((FormField)dfNode.getFormField()).subStepsCollapsed(); 
     114                boolean subStepsCollapsed = ((FieldPanel)dfNode.getFormField()).subStepsCollapsed(); 
    114115                 
    115116                if (!subStepsCollapsed) { 
    … …  
    120121                //              set visibility of the childBox wrt collapsed boolean of dataField 
    121122                //       & sets collapse button visible if dataFieldNode has children 
    122                 ((FormField)dfNode.getFormField()).refreshTitleCollapsed(); 
     123                ((FieldPanel)dfNode.getFormField()).refreshTitleCollapsed(); 
    123124                 
    124125        } 
  • branches/OmeroEditor/src/ui/components/AttributeEditorListeners.java

    r5526 r5543  
    3131import javax.swing.text.JTextComponent; 
    3232 
     33import fields.IField; 
     34 
    3335//Third-party libraries 
    3436 
    … …  
    4345 * Then when focus is lost, the focusListener updates the dataField 
    4446 * attribute (if textChanged), by calling  
    45  * setDataFieldAttribute.  
     47 * setDataFieldAttribute. TextChanged is reset to false.