Changeset 4320


Ignore:
Timestamp:
2003-05-23T16:41:22+12:00 (21 years ago)
Author:
jmt12
Message:

complete redesign

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gli/src/org/greenstone/gatherer/valuetree/GValueTree.java

    r4293 r4320  
    6262public class GValueTree
    6363     extends JPanel
    64      implements ActionListener, FocusListener, MSMListener, ItemListener, KeyListener, TreeSelectionListener {
     64     implements ActionListener, FocusListener, MSMListener, TreeSelectionListener {
    6565     /** Is the metadata currently shown in the edit controls common to all records selected. */
    6666     private boolean common = false;
     
    7373     /** The metadata element that is currently selected. */
    7474     private ElementWrapper selected_metadata_element = null;
    75      private GComboBox elements;
     75     //private GComboBox elements;
    7676     private MetadataComboBoxModel em;
    7777     private GValueModel vm;
     
    8484     private JButton search;
    8585     private JButton update;
    86      private JLabel element_label;
     86     //private JLabel element_label;
    8787     private JLabel value_label;
    8888     private JList list;
     
    9090     private JPanel button_pane;
    9191     private JPanel center_pane;
    92      private JPanel list_pane;
     92     //private JPanel list_pane;
    9393     private JPanel north_pane;
    94      private JPanel south_pane;
     94     //private JPanel south_pane;
    9595     private JPanel tree_pane;
    9696     private JPanel value_pane;
     
    105105     static final private Dimension LABEL_SIZE = new Dimension(132, 26);
    106106
    107      static final private String LIST = "List";
     107     //static final private String LIST = "List";
    108108     static final private String NONE = "None";
    109109     static final private String TREE = "Tree";
     
    132132         setPreferredSize(size);
    133133
    134          north_pane = new JPanel();
    135 
    136          element_label = new JLabel(get("Element"));
    137          element_label.setPreferredSize(LABEL_SIZE);
    138 
    139          elements = new GComboBox();
    140          elements.addItemListener(this);
    141          elements.setEditable(false);
    142          elements.setMaximumRowCount(5);
    143          elements.setPreferredSize(new Dimension(413, 24));
     134         //north_pane = new JPanel();
     135
     136         //element_label = new JLabel(get("Element"));
     137         //element_label.setPreferredSize(LABEL_SIZE);
     138
     139         //elements = new GComboBox();
     140         //elements.addItemListener(this);
     141         //elements.setEditable(false);
     142         //elements.setMaximumRowCount(5);
     143         //elements.setPreferredSize(new Dimension(413, 24));
    144144
    145145         center_pane = new JPanel();
     
    148148
    149149         auto_pane = new JPanel();
    150 
    151150         args[0] = "Title";
    152151         auto_message = new SmarterTextArea(get("AutoMessage", args), false);
     
    166165         //setTreeEnabled(false);
    167166
    168          list_pane = new JPanel();
    169 
    170          JLabel list_label = new JLabel(get("List"));
    171 
    172          list_model = new DefaultListModel();
    173          list = new JList(list_model);
    174          list.addListSelectionListener(new ListSelectionListenerImpl());
    175 
    176          south_pane = new JPanel();
     167         //list_pane = new JPanel();
     168         //JLabel list_label = new JLabel(get("List"));
     169         //list_model = new DefaultListModel();
     170         //list = new JList(list_model);
     171         //list.addListSelectionListener(new ListSelectionListenerImpl());
     172
     173         JPanel controls_pane = new JPanel();
    177174
    178175         value_pane = new JPanel();
    179 
    180176         value_label = new JLabel(get("Value"));
    181177         value_label.setPreferredSize(LABEL_SIZE);
     178         JPanel edit_pane = new JPanel();
     179         expand = new JButton(get("General.Expand"));
     180         expand.setMnemonic(KeyEvent.VK_E);
     181         expand.setPreferredSize(MetaEditPane.BUTTON_SIZE);
    182182
    183183         value = new JTextField();
    184184         value.addActionListener(this);
     185         value.setBackground(Gatherer.config.getColor("coloring.editable", false));
    185186         value.addFocusListener(this);
    186187         //value.addKeyListener(this);
     188         value.setPreferredSize(new Dimension(413, 24));
     189
     190         button_pane = new JPanel();
     191
     192         JPanel inner_button_pane = new JPanel();
     193
     194         //restore = new JButton(get("Restore"));
     195         //restore.setEnabled(false);
     196         //restore.setMnemonic(KeyEvent.VK_T);
     197
     198         //search = new JButton(get("Search"));
     199         //search.setMnemonic(KeyEvent.VK_S);
     200
     201         // Connection
     202         expand.addActionListener(this);
     203         //restore.addActionListener(this);
     204         //search.addActionListener(this);
    187205         value.getDocument().addDocumentListener(new DocumentListenerImpl());
    188          value.setPreferredSize(new Dimension(413, 24));
    189 
    190          button_pane = new JPanel();
    191 
    192          expand = new JButton(get("General.Expand"));
    193          expand.addActionListener(this);
    194          expand.setMnemonic(KeyEvent.VK_E);
    195 
    196          restore = new JButton(get("Restore"));
    197          restore.addActionListener(this);
    198          restore.setEnabled(false);
    199          restore.setMnemonic(KeyEvent.VK_T);
    200 
    201          search = new JButton(get("Search"));
    202          search.addActionListener(this);
    203          search.setMnemonic(KeyEvent.VK_S);
    204206
    205207         // Layout
    206          element_label.setBorder(BorderFactory.createEmptyBorder(0,0,0,5));
    207 
    208          north_pane.setLayout(new BorderLayout());
    209          north_pane.add(element_label, BorderLayout.CENTER);
    210          north_pane.add(elements, BorderLayout.EAST);
     208         //element_label.setBorder(BorderFactory.createEmptyBorder(0,0,0,5));
     209         //north_pane.setLayout(new BorderLayout());
     210         //north_pane.add(element_label, BorderLayout.CENTER);
     211         //north_pane.add(elements, BorderLayout.EAST);
    211212
    212213         tree_pane.setLayout(new BorderLayout());
     
    214215         tree_pane.add(new JScrollPane(tree), BorderLayout.CENTER);
    215216
    216          list_pane.setLayout(new BorderLayout());
    217          list_pane.add(list_label, BorderLayout.NORTH);
    218          list_pane.add(new JScrollPane(list), BorderLayout.CENTER);
     217         //list_pane.setLayout(new BorderLayout());
     218         //list_pane.add(list_label, BorderLayout.NORTH);
     219         //list_pane.add(new JScrollPane(list), BorderLayout.CENTER);
    219220
    220221         auto_pane.setBorder(BorderFactory.createEmptyBorder(25,10,25,10));
     
    225226         center_pane.setLayout(card_layout);
    226227         center_pane.add(tree_pane, TREE);
    227          center_pane.add(list_pane, LIST);
     228         //center_pane.add(list_pane, LIST);
    228229         center_pane.add(auto_pane, NONE);
    229230
    230231         value_label.setBorder(BorderFactory.createEmptyBorder(0,0,0,5));
    231232
    232          value_pane.setBorder(BorderFactory.createEmptyBorder(0,0,2,0));
     233         inner_button_pane.setLayout(new GridLayout(3,1,0,0));
     234         inner_button_pane.add(add);
     235         inner_button_pane.add(update);
     236         inner_button_pane.add(remove);
     237
     238         edit_pane.setLayout(new BorderLayout());
     239         edit_pane.add(expand, BorderLayout.NORTH);
     240
     241         button_pane.setLayout(new BorderLayout());
     242         button_pane.add(inner_button_pane, BorderLayout.WEST);
     243         button_pane.add(edit_pane, BorderLayout.EAST);
     244
     245         value_pane.setBorder(BorderFactory.createEmptyBorder(0,0,5,0));
    233246         value_pane.setLayout(new BorderLayout());
    234247         value_pane.add(value_label, BorderLayout.CENTER);
    235248         value_pane.add(value, BorderLayout.EAST);
    236 
    237          button_pane.setLayout(new GridLayout(2,3,2,0));
    238          button_pane.add(search);
    239          button_pane.add(restore);
    240          button_pane.add(expand);
    241          button_pane.add(add);
    242          button_pane.add(update);
    243          button_pane.add(remove);
    244 
    245          south_pane.setLayout(new BorderLayout());
    246          south_pane.add(value_pane, BorderLayout.CENTER);
    247          south_pane.add(button_pane, BorderLayout.SOUTH);
     249         value_pane.add(button_pane, BorderLayout.SOUTH);
     250
     251         controls_pane.setLayout(new BorderLayout());
     252         controls_pane.add(value_pane, BorderLayout.CENTER);
     253         //controls_pane.add(button_pane, BorderLayout.SOUTH);
    248254
    249255         this.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
    250256         this.setLayout(new BorderLayout());
    251          this.add(north_pane, BorderLayout.NORTH);
     257         this.add(controls_pane, BorderLayout.NORTH);
    252258         this.add(center_pane, BorderLayout.CENTER);
    253          this.add(south_pane, BorderLayout.SOUTH);
     259         //this.add(south_pane, BorderLayout.SOUTH);
    254260     }
    255261
     
    264270                    ///ystem.err.println("1. Set value: " + node.toString());
    265271                    value.setText(Utility.stripNL(node.toString()));//formatPath(path, false)));
     272                    value.setCaretPosition(0);
    266273                    // Now systematically add to selected record.
    267274                    add.doClick();
     
    275282                         GValueNode node = (GValueNode)new_path.getLastPathComponent();
    276283                         ///ystem.err.println("2. Set value: " + node.toString());
    277                          value.setText(Utility.stripNL(node.toString()));       
     284                         value.setText(Utility.stripNL(node.toString()));   
     285                         value.setCaretPosition(0);
    278286                         // Now systematically add to selected record.
    279287                         add.doClick();
     
    281289              }
    282290         }
    283          else if(event.getSource() == search) {
    284               searchValues();
    285               restore.setEnabled(true);
    286               card_layout.show(center_pane, LIST);
    287          }
    288          else if(event.getSource() == restore) {
    289               restore.setEnabled(false);
    290               card_layout.show(center_pane, TREE);
    291          }
     291         //else if(event.getSource() == search) {
     292         //   searchValues();
     293         //   restore.setEnabled(true);
     294         //   card_layout.show(center_pane, LIST);
     295         //}
     296         //else if(event.getSource() == restore) {
     297         //   restore.setEnabled(false);
     298         //   card_layout.show(center_pane, TREE);
     299         //}
    292300         else if(event.getSource() == expand) {
    293301              EditorDialog ed = new EditorDialog();
     
    296304                    ///ystem.err.println("3. Set value: " + temp);
    297305                    value.setText(temp);
     306                    value.setCaretPosition(0);
    298307              }
    299308              //validateControls();
     
    336345      * @param event An ItemEvent encapsulating all the information about this event.
    337346      */
     347     /*
    338348    public void itemStateChanged(ItemEvent event) {
    339349          ///ystem.err.println("Item State Changed");
     
    342352                selected_metadata_element = (ElementWrapper)em.getSelectedItem();
    343353                if(selected_metadata_element != null) {
    344                      elements.setToolTipText(selected_metadata_element.getToolTip());
     354                     //elements.setToolTipText(selected_metadata_element.getToolTip());
    345355                     vm = null;
    346356                     vm = Gatherer.c_man.getCollection().msm.getValueTree(selected_metadata_element);
     
    362372                }
    363373                value.setText("");
    364                 metaedit.validateControls();
     374                metaedit.validateControls(false);
    365375          }
    366376          previous = null;
     
    368378          validateControls();
    369379    }
    370 
    371      public void keyPressed(KeyEvent event) {
    372      }
    373 
    374     public void keyReleased(KeyEvent event) {
    375           ignore = true;
    376           ///ystem.err.println("Key released.");
    377           StringTokenizer tokenizer = new StringTokenizer(value.getText(), "\\");
    378           TreePath closest = getClosestPath(tokenizer);
    379           if(closest == previous) {
    380                 validateControls();
    381                 ignore = false;
    382                 return;
    383           }
    384           else {
    385                 // Clear previous
    386                 if(previous != null) {
    387                      // We have a brand new match close up the old one.
    388                      if(closest != null) {
    389                           if(getParent(previous) != null &&
    390                               !getParent(previous).toString().equals
    391                               ("[AssignedValues]")) {
    392                                 tree.collapsePath(getParent(previous));
    393                           }
    394                           previous = null;
    395                      }
    396                      // We haven't got a match, but we did have a matching path to
    397                      // this point. Move the selection to previous paths parent.
    398                      else {
    399                           tree.setSelectionPath(getParent(previous));
    400                      }
    401                 }
    402                
    403                 if(closest != null) {
    404                      tree.setSelectionPath(closest);
    405                      tree.scrollPathToVisible(closest);
    406                      previous = closest;
    407                 }
    408           }
    409           ignore = false;
    410           validateControls();
    411     }
    412    
    413     public void keyTyped(KeyEvent event) {
    414     }
     380     */
    415381
    416382     /** Called whenever a metadata value is changed.
     
    479445          ignore_item_change = true;
    480446          em = model;
    481           elements.setModel(em);
     447          //elements.setModel(em);
    482448          if(em.getSize() > 0) {
    483449                ///ystem.err.println("em.size() > 0");
    484                 elements.setEnabled(true);
    485                 elements.setSelectedIndex(0);
     450                //elements.setEnabled(true);
     451                //elements.setSelectedIndex(0);
    486452                selected_metadata_element = (ElementWrapper)em.getSelectedItem();
    487                 elements.setToolTipText(selected_metadata_element.getToolTip());
     453                //elements.setToolTipText(selected_metadata_element.getToolTip());
    488454                // First we create and install a blank model, or else no updates ever work.
    489455                vm = new GValueModel(get("Not_Applicable"));
     
    504470                ///ystem.err.println("6. Set value: " + getLastValue());
    505471                value.setText(Utility.stripNL(getLastValue()));
     472                value.setCaretPosition(0);
    506473          }
    507474          else {
    508475                ///ystem.err.println("No elements loaded.");
    509                 elements.setEnabled(false);
    510                 elements.setToolTipText(get("No_Description"));
     476                //elements.setEnabled(false);
     477                //elements.setToolTipText(get("No_Description"));
    511478                //setTreeEnabled(false);
    512479                value.setText("");
     
    530497                if(element != null) {
    531498                     selected_metadata_element = element;
    532                      elements.setSelectedItem(element);
    533                      elements.setToolTipText(element.getToolTip());
     499                     //elements.setSelectedItem(element);
     500                     //elements.setToolTipText(element.getToolTip());
    534501                     vm = Gatherer.c_man.getCollection().msm.getValueTree(element);
    535502                     if(vm != null) {
     
    543510                     tree.setModel(vm);
    544511                     ///ystem.err.println("7. Set value: " + getLastValue());
    545                      value.setText(Utility.stripNL(getLastValue()));
     512                     //value.setText(Utility.stripNL(getLastValue()));
     513                     //value.setCaretPosition(0);
    546514                }
    547515                else {
    548                      elements.setToolTipText(get("No_Description"));
     516                     //elements.setToolTipText(get("No_Description"));
    549517                     setTreeEnabled(false);
    550                      value.setText("");
    551                 }
    552                 metaedit.validateControls();
     518                     //value.setText("");
     519                }
     520                metaedit.validateControls(false);
    553521          }
    554522          previous = null;
    555523          ignore_item_change = false;
    556           validateControls();
     524          //validateControls();
    557525    }
    558526
     
    560528          ignore = true;
    561529          value.setText(Utility.stripNL(val));
     530          value.setCaretPosition(0);
    562531          StringTokenizer tokenizer = new StringTokenizer(val, "\\");
    563532          TreePath closest = getClosestPath(tokenizer);
     
    571540          }
    572541          ignore = false;
    573           validateControls();
     542          //validateControls();
    574543     }
    575544
    576545     /** This method enables or diables the various controls based upon the
    577546      * state of the system. This method should be called after every change
    578       * which could affect the GUI.
     547      * which could affect the GUI. <br>
     548      * Hack #1: For some reason this gets called 14 times for one selection. One day I'll figure out why, but for now I'll just ignore all but every fourteenth call.
    579549      */
    580550     public void validateControls() {
    581           //gatherer.debug("Validating controls...");
    582           ///ystem.err.println("Validating controls...");
    583           // Validate add
    584           if(metaedit.getSelectedNode() != null && value.getText().length() > 0) {
    585               add.setEnabled(true);
    586               //gatherer.debug("Accepted.");
    587               ///ystem.err.println("Yes");
     551          Metadata selected_metadata = metaedit.getSelectedMetadata();
     552          if(metaedit.getSelectedNode() != null && selected_metadata != null) {
     553                ElementWrapper element = selected_metadata.getElement();
     554                if(element.getNamespace() != "") {
     555                     GValueNode value_node = selected_metadata.getValueNode();
     556                     ///ystem.err.println("Value node = " + value_node);
     557                     // We may be dealing with an element that has no current value
     558                     if(value_node == null) {
     559                          String new_value = value.getText();
     560                          if(new_value.length() > 0) {
     561                                add.setEnabled(true);
     562                          }
     563                          else {
     564                                add.setEnabled(false);
     565                          }
     566                          // Nothing to update
     567                          update.setEnabled(false);
     568                          // Nothing to remove
     569                          remove.setEnabled(false);
     570                     }
     571                     // Or else we have some current value that may or may not match the one in our value field.
     572                     else {
     573                          String current_value = selected_metadata.getValueNode().getFullPath();
     574                          String new_value = value.getText();
     575                          ///ystem.err.println("Current value: '" + current_value + "'");
     576                          ///ystem.err.println("New value:     '" + new_value + "'");
     577                          if(new_value.length() > 0 && !current_value.equals(new_value)) {
     578                                add.setEnabled(true);
     579                                if(common && file_level) {
     580                                     update.setEnabled(true);
     581                                }
     582                                else {
     583                                     update.setEnabled(false);
     584                                }
     585                          }
     586                          else {
     587                                add.setEnabled(false);
     588                                update.setEnabled(false);
     589                          }
     590                          // If you have something selected, and we're at the file level, you can remove it.
     591                          if(file_level) {
     592                                remove.setEnabled(true);
     593                          }
     594                          else {
     595                                remove.setEnabled(false);
     596                          }
     597                     }
     598                }
     599                else {
     600                     add.setEnabled(false);
     601                     update.setEnabled(false);
     602                     remove.setEnabled(false);
     603                }           
    588604          }
    589605          else {
    590               add.setEnabled(false);
    591               //gatherer.debug("Denied.");
    592               ///ystem.err.println("No.");
    593           }
    594 
    595           // Validate update
    596           Metadata selected_metadata = metaedit.getSelectedMetadata();
    597           if(metaedit.getSelectedNode() != null &&  selected_metadata != null && selected_metadata.getValueNode() != null && selected_metadata.getValueNode().getFullPath().length() > 0 && value.getText().length() > 0 && common) {
    598                 update.setEnabled(true);
    599           }
    600           else {
     606                add.setEnabled(false);
    601607                update.setEnabled(false);
    602           }
    603 
    604           // Validate remove
    605           if(metaedit.getSelectedNode() != null && metaedit.getSelectedMetadata() != null && file_level) {
    606                 remove.setEnabled(true);
    607           }
    608           else {
    609608                remove.setEnabled(false);
    610609          }
     
    637636                GValueNode node = (GValueNode) path.getLastPathComponent();
    638637                value.setText(node.getFullPath());//formatPath(tree.getSelectionPath(), false)));
    639           }
    640           validateControls();
     638                value.setCaretPosition(0);
     639                validateControls();
     640          }
    641641    }
    642642   
     
    784784         }
    785785         else {
    786               args[0] = selected_metadata_element.toString();
     786              Metadata selected_metadata = metaedit.getSelectedMetadata();
     787              if(selected_metadata != null && selected_metadata.getElement() != null) {
     788                    args[0] = selected_metadata.getElement().toString();
     789              }
     790              else {
     791                    args[0] = "";
     792              }
    787793              auto_message.setText(get("AutoMessage", args));
    788794              card_layout.show(center_pane, NONE);
     
    815821          /** Gives notification that an attribute or set of attributes changed. */
    816822          public void changedUpdate(DocumentEvent e) {
    817                 validateControls();
     823                validate();
    818824          }
    819825         
    820826          /** Gives notification that there was an insert into the document. */
    821827          public void insertUpdate(DocumentEvent e) {
    822                 validateControls();
     828                validate();
    823829          }
    824830         
    825831          /** Gives notification that a portion of the document has been removed. */
    826832          public void removeUpdate(DocumentEvent e) {
     833                validate();
     834          }
     835
     836          public void validate() {
     837                ignore = true;
     838                ///ystem.err.println("Key released.");
     839                StringTokenizer tokenizer = new StringTokenizer(value.getText(), "\\");
     840                TreePath closest = getClosestPath(tokenizer);
     841                if(closest == previous) {
     842                     validateControls();
     843                     ignore = false;
     844                     return;
     845                }
     846                else {
     847                     // Clear previous
     848                     if(previous != null) {
     849                          // We have a brand new match close up the old one.
     850                          if(closest != null) {
     851                                if(getParent(previous) != null &&
     852                                    !getParent(previous).toString().equals("[AssignedValues]")) {
     853                                     tree.collapsePath(getParent(previous));
     854                                }
     855                                previous = null;
     856                          }
     857                          // We haven't got a match, but we did have a matching path to
     858                          // this point. Move the selection to previous paths parent.
     859                          else {
     860                                tree.setSelectionPath(getParent(previous));
     861                          }
     862                     }
     863                     
     864                     if(closest != null) {
     865                          tree.setSelectionPath(closest);
     866                          tree.scrollPathToVisible(closest);
     867                          previous = closest;
     868                     }
     869                }
     870                ignore = false;
    827871                validateControls();
    828872          }
Note: See TracChangeset for help on using the changeset viewer.