Changeset 4320
- Timestamp:
- 2003-05-23T16:41:22+12:00 (21 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gli/src/org/greenstone/gatherer/valuetree/GValueTree.java
r4293 r4320 62 62 public class GValueTree 63 63 extends JPanel 64 implements ActionListener, FocusListener, MSMListener, ItemListener, KeyListener,TreeSelectionListener {64 implements ActionListener, FocusListener, MSMListener, TreeSelectionListener { 65 65 /** Is the metadata currently shown in the edit controls common to all records selected. */ 66 66 private boolean common = false; … … 73 73 /** The metadata element that is currently selected. */ 74 74 private ElementWrapper selected_metadata_element = null; 75 private GComboBox elements;75 //private GComboBox elements; 76 76 private MetadataComboBoxModel em; 77 77 private GValueModel vm; … … 84 84 private JButton search; 85 85 private JButton update; 86 private JLabel element_label;86 //private JLabel element_label; 87 87 private JLabel value_label; 88 88 private JList list; … … 90 90 private JPanel button_pane; 91 91 private JPanel center_pane; 92 private JPanel list_pane;92 //private JPanel list_pane; 93 93 private JPanel north_pane; 94 private JPanel south_pane;94 //private JPanel south_pane; 95 95 private JPanel tree_pane; 96 96 private JPanel value_pane; … … 105 105 static final private Dimension LABEL_SIZE = new Dimension(132, 26); 106 106 107 static final private String LIST = "List";107 //static final private String LIST = "List"; 108 108 static final private String NONE = "None"; 109 109 static final private String TREE = "Tree"; … … 132 132 setPreferredSize(size); 133 133 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)); 144 144 145 145 center_pane = new JPanel(); … … 148 148 149 149 auto_pane = new JPanel(); 150 151 150 args[0] = "Title"; 152 151 auto_message = new SmarterTextArea(get("AutoMessage", args), false); … … 166 165 //setTreeEnabled(false); 167 166 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(); 177 174 178 175 value_pane = new JPanel(); 179 180 176 value_label = new JLabel(get("Value")); 181 177 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); 182 182 183 183 value = new JTextField(); 184 184 value.addActionListener(this); 185 value.setBackground(Gatherer.config.getColor("coloring.editable", false)); 185 186 value.addFocusListener(this); 186 187 //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); 187 205 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);204 206 205 207 // 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); 211 212 212 213 tree_pane.setLayout(new BorderLayout()); … … 214 215 tree_pane.add(new JScrollPane(tree), BorderLayout.CENTER); 215 216 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); 219 220 220 221 auto_pane.setBorder(BorderFactory.createEmptyBorder(25,10,25,10)); … … 225 226 center_pane.setLayout(card_layout); 226 227 center_pane.add(tree_pane, TREE); 227 center_pane.add(list_pane, LIST);228 //center_pane.add(list_pane, LIST); 228 229 center_pane.add(auto_pane, NONE); 229 230 230 231 value_label.setBorder(BorderFactory.createEmptyBorder(0,0,0,5)); 231 232 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)); 233 246 value_pane.setLayout(new BorderLayout()); 234 247 value_pane.add(value_label, BorderLayout.CENTER); 235 248 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); 248 254 249 255 this.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); 250 256 this.setLayout(new BorderLayout()); 251 this.add( north_pane, BorderLayout.NORTH);257 this.add(controls_pane, BorderLayout.NORTH); 252 258 this.add(center_pane, BorderLayout.CENTER); 253 this.add(south_pane, BorderLayout.SOUTH);259 //this.add(south_pane, BorderLayout.SOUTH); 254 260 } 255 261 … … 264 270 ///ystem.err.println("1. Set value: " + node.toString()); 265 271 value.setText(Utility.stripNL(node.toString()));//formatPath(path, false))); 272 value.setCaretPosition(0); 266 273 // Now systematically add to selected record. 267 274 add.doClick(); … … 275 282 GValueNode node = (GValueNode)new_path.getLastPathComponent(); 276 283 ///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); 278 286 // Now systematically add to selected record. 279 287 add.doClick(); … … 281 289 } 282 290 } 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 //} 292 300 else if(event.getSource() == expand) { 293 301 EditorDialog ed = new EditorDialog(); … … 296 304 ///ystem.err.println("3. Set value: " + temp); 297 305 value.setText(temp); 306 value.setCaretPosition(0); 298 307 } 299 308 //validateControls(); … … 336 345 * @param event An ItemEvent encapsulating all the information about this event. 337 346 */ 347 /* 338 348 public void itemStateChanged(ItemEvent event) { 339 349 ///ystem.err.println("Item State Changed"); … … 342 352 selected_metadata_element = (ElementWrapper)em.getSelectedItem(); 343 353 if(selected_metadata_element != null) { 344 elements.setToolTipText(selected_metadata_element.getToolTip());354 //elements.setToolTipText(selected_metadata_element.getToolTip()); 345 355 vm = null; 346 356 vm = Gatherer.c_man.getCollection().msm.getValueTree(selected_metadata_element); … … 362 372 } 363 373 value.setText(""); 364 metaedit.validateControls( );374 metaedit.validateControls(false); 365 375 } 366 376 previous = null; … … 368 378 validateControls(); 369 379 } 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 */ 415 381 416 382 /** Called whenever a metadata value is changed. … … 479 445 ignore_item_change = true; 480 446 em = model; 481 elements.setModel(em);447 //elements.setModel(em); 482 448 if(em.getSize() > 0) { 483 449 ///ystem.err.println("em.size() > 0"); 484 elements.setEnabled(true);485 elements.setSelectedIndex(0);450 //elements.setEnabled(true); 451 //elements.setSelectedIndex(0); 486 452 selected_metadata_element = (ElementWrapper)em.getSelectedItem(); 487 elements.setToolTipText(selected_metadata_element.getToolTip());453 //elements.setToolTipText(selected_metadata_element.getToolTip()); 488 454 // First we create and install a blank model, or else no updates ever work. 489 455 vm = new GValueModel(get("Not_Applicable")); … … 504 470 ///ystem.err.println("6. Set value: " + getLastValue()); 505 471 value.setText(Utility.stripNL(getLastValue())); 472 value.setCaretPosition(0); 506 473 } 507 474 else { 508 475 ///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")); 511 478 //setTreeEnabled(false); 512 479 value.setText(""); … … 530 497 if(element != null) { 531 498 selected_metadata_element = element; 532 elements.setSelectedItem(element);533 elements.setToolTipText(element.getToolTip());499 //elements.setSelectedItem(element); 500 //elements.setToolTipText(element.getToolTip()); 534 501 vm = Gatherer.c_man.getCollection().msm.getValueTree(element); 535 502 if(vm != null) { … … 543 510 tree.setModel(vm); 544 511 ///ystem.err.println("7. Set value: " + getLastValue()); 545 value.setText(Utility.stripNL(getLastValue())); 512 //value.setText(Utility.stripNL(getLastValue())); 513 //value.setCaretPosition(0); 546 514 } 547 515 else { 548 elements.setToolTipText(get("No_Description"));516 //elements.setToolTipText(get("No_Description")); 549 517 setTreeEnabled(false); 550 value.setText("");551 } 552 metaedit.validateControls( );518 //value.setText(""); 519 } 520 metaedit.validateControls(false); 553 521 } 554 522 previous = null; 555 523 ignore_item_change = false; 556 validateControls();524 //validateControls(); 557 525 } 558 526 … … 560 528 ignore = true; 561 529 value.setText(Utility.stripNL(val)); 530 value.setCaretPosition(0); 562 531 StringTokenizer tokenizer = new StringTokenizer(val, "\\"); 563 532 TreePath closest = getClosestPath(tokenizer); … … 571 540 } 572 541 ignore = false; 573 validateControls();542 //validateControls(); 574 543 } 575 544 576 545 /** This method enables or diables the various controls based upon the 577 546 * 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. 579 549 */ 580 550 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 } 588 604 } 589 605 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); 601 607 update.setEnabled(false); 602 }603 604 // Validate remove605 if(metaedit.getSelectedNode() != null && metaedit.getSelectedMetadata() != null && file_level) {606 remove.setEnabled(true);607 }608 else {609 608 remove.setEnabled(false); 610 609 } … … 637 636 GValueNode node = (GValueNode) path.getLastPathComponent(); 638 637 value.setText(node.getFullPath());//formatPath(tree.getSelectionPath(), false))); 639 } 640 validateControls(); 638 value.setCaretPosition(0); 639 validateControls(); 640 } 641 641 } 642 642 … … 784 784 } 785 785 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 } 787 793 auto_message.setText(get("AutoMessage", args)); 788 794 card_layout.show(center_pane, NONE); … … 815 821 /** Gives notification that an attribute or set of attributes changed. */ 816 822 public void changedUpdate(DocumentEvent e) { 817 validate Controls();823 validate(); 818 824 } 819 825 820 826 /** Gives notification that there was an insert into the document. */ 821 827 public void insertUpdate(DocumentEvent e) { 822 validate Controls();828 validate(); 823 829 } 824 830 825 831 /** Gives notification that a portion of the document has been removed. */ 826 832 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; 827 871 validateControls(); 828 872 }
Note:
See TracChangeset
for help on using the changeset viewer.