- Timestamp:
- 2003-11-19T15:11:46+13:00 (21 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gli/src/org/greenstone/gatherer/cdm/TranslationView.java
r5752 r5901 189 189 190 190 TranslationControl() { 191 fragment_table_model = new FragmentTableModel( new ArrayList());191 fragment_table_model = new FragmentTableModel("", new TreeSet(), new ArrayList()); 192 192 // Creation 193 193 JPanel header_panel = new JPanel(); … … 370 370 fragment_table.clearSelection(); 371 371 ArrayList metadata = CollectionDesignManager.collectionmeta_manager.getMetadata(selected_feature.getName()); 372 fragment_table_model.setData( metadata);372 fragment_table_model.setData(selected_feature.getName(), CollectionDesignManager.collectionmeta_manager.getLanguages(), metadata); 373 373 int index = fragment_table_model.getMetadataIndexByLanguage(language); 374 ///ystem.err.println("I want to select the row " + index + " out of " + metadata.size()); 374 375 fragment_table.setRowSelectionInterval(index, index); 375 376 metadatum = null; … … 377 378 selected_feature = null; 378 379 translation_text = null; 379 re place_button.setEnabled(true);380 remove_button.setEnabled(true); 380 381 } 381 382 add_button.setEnabled(false); … … 443 444 // Update the text fragment table. 444 445 fragment_table.clearSelection(); 445 fragment_table_model.setData( CollectionDesignManager.collectionmeta_manager.getMetadata(selected_feature.getName()));446 fragment_table_model.setData(selected_feature.getName(), CollectionDesignManager.collectionmeta_manager.getLanguages(), CollectionDesignManager.collectionmeta_manager.getMetadata(selected_feature.getName())); 446 447 selected_feature = null; 447 448 // Now we check whatever value is currently selected in the combobox to see if it is valid to add. … … 451 452 CollectionMeta metadata = fragment_table_model.getMetadata(index); 452 453 fragment_table.setRowSelectionInterval(index, index); 453 translation_area.setText(metadata.getValue(CollectionMeta.TEXT)); 454 if(metadata != null) { 455 translation_area.setText(metadata.getValue(CollectionMeta.TEXT)); 456 } 457 else { 458 translation_area.setText(""); 459 } 454 460 metadata = null; 455 461 } … … 464 470 default_area.setText(""); 465 471 fragment_table.clearSelection(); 466 fragment_table_model.setData( new ArrayList());472 fragment_table_model.setData("", new TreeSet(), new ArrayList()); 467 473 translation_area.setText(""); 468 474 // Update and disable the text area … … 479 485 public void valueChanged(ListSelectionEvent event) { 480 486 if(!event.getValueIsAdjusting() && !ignore_event) { 487 ignore_event = true; 481 488 ///ystem.err.println("FragmentListSelectionListener"); 482 489 int index = -1; 483 490 if((index = fragment_table.getSelectedRow()) != -1) { 484 491 // A row has been selected. Retrieve the collection metadata. 485 CollectionMeta metadat a= fragment_table_model.getMetadata(index);486 if(metadat a!= null) {492 CollectionMeta metadatum = fragment_table_model.getMetadata(index); 493 if(metadatum != null) { 487 494 // Update the combobox to show the current language. 488 String language = metadat a.getLanguage();495 String language = metadatum.getLanguage(); 489 496 ///ystem.err.println("Searching for the language: " + language_name); 490 497 for(int i = 0; i < language_combobox.getItemCount(); i++) { … … 493 500 } 494 501 } 502 translation_area.setText(metadatum.getValue(CollectionMeta.TEXT)); 503 remove_button.setEnabled(!metadatum.isDummy()); 495 504 } 496 translation_area.setText(metadata.getValue(CollectionMeta.TEXT)); 497 remove_button.setEnabled(true); 505 else { 506 remove_button.setEnabled(false); 507 } 498 508 } 499 509 else { … … 501 511 remove_button.setEnabled(false); 502 512 } 513 ignore_event = false; 503 514 } 504 515 } … … 509 520 510 521 private ArrayList metadata; 511 512 FragmentTableModel(ArrayList metadata) { 522 private String feature_name; 523 private TreeSet languages; 524 525 FragmentTableModel(String feature_name, TreeSet languages, ArrayList metadata) { 526 this.feature_name = feature_name; 527 this.languages = languages; 513 528 this.metadata = metadata; 514 529 } 515 530 public int getRowCount() { 516 // The row count is equal to the maximum number of languages currently assigned in the collection. This is cache to speed up construction. Essentially we go through every feature determining what language fragments have been assigned. 517 518 519 return metadata.size(); 531 // The row count is equal to the maximum number of languages currently assigned in the collection. 532 return languages.size(); 520 533 } 521 534 public int getColumnCount() { … … 533 546 } 534 547 548 /** Attempt to retrieve the metadata associated with a certain row - however not all rows actually have metadata with them (say the French row where no metadata has been set). 549 * @param row the row number as an int 550 * @return the CollectionMeta requested, which may be a dummy metadata pair 551 */ 535 552 public CollectionMeta getMetadata(int row) { 536 if(0 <= row && row < metadata.size()) { 537 return (CollectionMeta) metadata.get(row); 538 } 553 // Determine what language we are talking about 554 String language = null; 555 Iterator language_iterator = languages.iterator(); 556 int current_row = 0; 557 while(current_row != row && language_iterator.hasNext()) { 558 language_iterator.next(); 559 current_row++; 560 } 561 if(current_row == row) { 562 language = (String) language_iterator.next(); 563 return getMetadata(language); 564 } 565 language_iterator = null; 539 566 return null; 540 567 } 541 568 542 public int getMetadataIndexByLanguage(String language) { 569 public CollectionMeta getMetadata(String language) { 570 // Attempt to retrieve metadata with that language 543 571 for(int i = 0; i < metadata.size(); i++) { 544 572 CollectionMeta metadatum = (CollectionMeta) metadata.get(i); 545 if(language.equals(metadatum.getLanguage())) { 546 return i; 547 } 548 } 573 if(metadatum.getLanguage().equals(language)) { 574 return metadatum; 575 } 576 } 577 return new CollectionMeta(feature_name, language, true); 578 } 579 580 public int getMetadataIndexByLanguage(String language) { 581 ///ystem.err.println("Find the index for the language " + language + " (out of " + languages.size() + ")"); 582 // First we have to iterate to the correct place 583 Iterator language_iterator = languages.iterator(); 584 int current_row = 0; 585 while(language_iterator.hasNext()) { 586 String target = (String)language_iterator.next(); 587 if(language.equals(target)) { 588 ///ystem.err.println("Matches " + target); 589 return current_row; 590 } 591 else { 592 ///ystem.err.println("Doesn't match " + target); 593 current_row++; 594 } 595 } 596 ///ystem.err.println("No such language in model: -1"); 549 597 return -1; 550 598 } 551 599 552 600 public Object getValueAt(int row, int column) { 553 if(0 <= row && row < metadata.size()) { 554 CollectionMeta metadatum = (CollectionMeta) metadata.get(row); 555 switch(column) { 556 case 0: 557 return CollectionDesignManager.language_manager.getLanguageName(metadatum.getLanguage()); 558 default: 559 return metadatum.getValue(CollectionMeta.TEXT); 560 } 601 if(0 <= row && row < languages.size()) { 602 // First we have to iterate to the correct place 603 Iterator language_iterator = languages.iterator(); 604 int current_row = 0; 605 while(current_row != row && language_iterator.hasNext()) { 606 language_iterator.next(); 607 current_row++; 608 } 609 if(current_row == row) { 610 String language = (String)language_iterator.next(); 611 if(column == 0) { 612 return CollectionDesignManager.language_manager.getLanguageName(language); 613 } 614 else { 615 CollectionMeta metadatum = getMetadata(language); 616 return metadatum.getValue(CollectionMeta.TEXT); 617 } 618 } 619 language_iterator = null; 561 620 } 562 621 return "#Error"; … … 568 627 } 569 628 570 public void setData(ArrayList metadata) { 629 public void setData(String feature_name, TreeSet languages, ArrayList metadata) { 630 this.feature_name = feature_name; 631 this.languages = languages; 571 632 this.metadata = metadata; 572 633 fireTableDataChanged(); … … 646 707 // Determine if add should be enabled. You can only add if the current text fragment doesn't already exist in the fragment table for the given language 647 708 String language = (String) language_combobox.getSelectedItem(); 648 add_button.setEnabled(translation_text.length() > 0 && fragment_table_model.getMetadataIndexByLanguage(language) == -1); 709 CollectionMeta metadatum = fragment_table_model.getMetadata(language); 710 add_button.setEnabled(translation_text.length() > 0 && (metadatum.isDummy() || fragment_table_model.getMetadataIndexByLanguage(language) == -1)); 649 711 language = null; 650 712 // Determine if replace should be enabled. Replace is only enabled it the text fragment is different from the one in the current fragment table selection. 651 713 if(fragment_table.getSelectedRowCount() > 0) { 652 replace_button.setEnabled(! translation_text.equals(fragment_table.getValueAt(fragment_table.getSelectedRow(), 1)));714 replace_button.setEnabled(!metadatum.isDummy() && !translation_text.equals(fragment_table.getValueAt(fragment_table.getSelectedRow(), 1))); 653 715 } 654 716 // Nothing selected, nothing to replace
Note:
See TracChangeset
for help on using the changeset viewer.