- Timestamp:
- 2003-08-19T15:29:23+12:00 (21 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gli/src/org/greenstone/gatherer/cdm/TranslationView.java
r5090 r5206 188 188 private boolean ignore_event = false; 189 189 private FragmentTableModel fragment_table_model; 190 private JButton add_button; 191 private JButton remove_button; 192 private JButton replace_button; 190 193 private JComboBox language_combobox; 191 194 private JList features_list; … … 255 258 translation_area.setWrapStyleWord(true); 256 259 260 JPanel button_pane = new JPanel(); 261 add_button = new JButton(get("Add")); 262 add_button.setEnabled(false); 263 add_button.setMnemonic(KeyEvent.VK_A); 264 replace_button = new JButton(get("Replace")); 265 replace_button.setEnabled(false); 266 replace_button.setMnemonic(KeyEvent.VK_C); 267 remove_button = new JButton(get("Remove")); 268 remove_button.setEnabled(false); 269 remove_button.setMnemonic(KeyEvent.VK_R); 270 257 271 // Connection 272 add_button.addActionListener(new AddListener()); 273 remove_button.addActionListener(new RemoveListener()); 274 replace_button.addActionListener(new ReplaceListener()); 258 275 language_combobox.addActionListener(new LanguageActionListener()); 259 276 translation_area.getDocument().addDocumentListener(new TranslationDocumentListener()); 260 277 features_list.addListSelectionListener(new FeaturesListSelectionListener()); 261 278 fragment_table.getSelectionModel().addListSelectionListener(new FragmentListSelectionListener()); 279 262 280 // Layout 263 281 header_panel.setBorder(BorderFactory.createEmptyBorder(0,0,5,0)); … … 302 320 center_panel.add(south_panel); 303 321 322 button_pane.setBorder(BorderFactory.createEmptyBorder(2,0,0,0)); 323 button_pane.setLayout(new GridLayout(1,3)); 324 button_pane.add(add_button); 325 button_pane.add(replace_button); 326 button_pane.add(remove_button); 327 304 328 setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); 305 329 setLayout(new BorderLayout()); 306 330 add(header_panel, BorderLayout.NORTH); 307 331 add(center_panel, BorderLayout.CENTER); 332 add(button_pane, BorderLayout.SOUTH); 308 333 } 309 334 … … 325 350 } 326 351 352 353 private class AddListener 354 implements ActionListener { 355 356 public void actionPerformed(ActionEvent event) { 357 ignore_event = true; 358 String translation_text = translation_area.getText(); 359 if(translation_text.length() > 0) { 360 // If there is no current fragment table selection, but translation text is not an empty string, then this is a new fragment. Create new collection metadata, refresh the fragment table, then ensure that the new metadata is selected. Remember that it is the selected metadata to which changes will be applied. 361 BobTheMagicalComparableWrapper selected_feature = (BobTheMagicalComparableWrapper)features_list.getSelectedValue(); 362 String language = (String) language_combobox.getSelectedItem(); 363 CollectionMeta metadatum = new CollectionMeta(selected_feature.getName(), language); 364 metadatum.setValue(translation_text); 365 CollectionDesignManager.collectionmeta_manager.addMetadatum(metadatum); 366 fragment_table.clearSelection(); 367 ArrayList metadata = CollectionDesignManager.collectionmeta_manager.getMetadata(selected_feature.getName()); 368 fragment_table_model.setData(metadata); 369 int index = fragment_table_model.getMetadataIndexByLanguage(language); 370 fragment_table.setRowSelectionInterval(index, index); 371 metadatum = null; 372 language = null; 373 selected_feature = null; 374 translation_text = null; 375 replace_button.setEnabled(true); 376 } 377 add_button.setEnabled(false); 378 replace_button.setEnabled(false); 379 ignore_event = false; 380 } 381 } 382 383 private class RemoveListener 384 implements ActionListener { 385 386 public void actionPerformed(ActionEvent event) { 387 ignore_event = true; 388 int index = -1; 389 if((index = fragment_table.getSelectedRow()) != -1) { 390 CollectionMeta metadata = fragment_table_model.getMetadata(index); 391 CollectionDesignManager.collectionmeta_manager.removeMetadata(metadata); 392 fragment_table_model.remove(index); 393 // If a remove occured then enable add 394 add_button.setEnabled(true); 395 } 396 // Either way disable replace and remove 397 replace_button.setEnabled(false); 398 remove_button.setEnabled(false); 399 ignore_event = false; 400 } 401 } 402 403 private class ReplaceListener 404 implements ActionListener { 405 406 public void actionPerformed(ActionEvent event) { 407 ignore_event = true; 408 int index = -1; 409 if((index = fragment_table.getSelectedRow()) != -1) { 410 String translation_text = translation_area.getText(); 411 // Get the selected collection metadata 412 CollectionMeta metadata = fragment_table_model.getMetadata(index); 413 // Update the fragment metadata and ask the table to repaint the appropriate row 414 metadata.setValue(translation_text); 415 fragment_table_model.fireTableRowsUpdated(index, index); 416 metadata = null; 417 remove_button.setEnabled(true); 418 } 419 // Either way disable replace 420 add_button.setEnabled(false); 421 replace_button.setEnabled(false); 422 ignore_event = false; 423 } 424 } 425 327 426 private class FeaturesListSelectionListener 328 427 implements ListSelectionListener { 329 428 public void valueChanged(ListSelectionEvent event) { 330 if(!event.getValueIsAdjusting()) { 331 if(!ignore_event) { // And it shouldn't ever be. 332 ignore_event = true; 333 ///ystem.err.println("FeaturesListSelectionListener"); 334 if(!features_list.isSelectionEmpty()) { 335 // Determine the features name. Remember to remove our helpful source prefix (delimited by ':'). 336 BobTheMagicalComparableWrapper selected_feature = (BobTheMagicalComparableWrapper)features_list.getSelectedValue(); 337 // Retrieve the default language translation, or otherwise the first match, to be default text. 338 CollectionMeta default_metadata = CollectionDesignManager.collectionmeta_manager.getMetadatum(selected_feature.getName()); 339 if(default_metadata != null) { 340 default_area.setText(default_metadata.getValue()); 341 } 342 // Update the text fragment table. 343 fragment_table.clearSelection(); 344 fragment_table_model.setData(CollectionDesignManager.collectionmeta_manager.getMetadata(selected_feature.getName())); 345 selected_feature = null; 346 // Now we check whatever value is currently selected in the combobox to see if it is valid to add. 347 String language_name = (String) language_combobox.getSelectedItem(); 348 int index = fragment_table_model.getMetadataIndexByLanguage(language_name); 349 if(index != -1) { 350 CollectionMeta metadata = fragment_table_model.getMetadata(index); 351 fragment_table.setRowSelectionInterval(index, index); 352 translation_area.setText(metadata.getValue()); 353 metadata = null; 354 } 355 else { 356 translation_area.setText(""); 357 } 358 // Update and enable the text area 359 translation_area.setEnabled(true); 360 translation_area.setBackground(Gatherer.config.getColor("coloring.editable_background", false)); 429 if(!event.getValueIsAdjusting() && !ignore_event) { 430 ///ystem.err.println("FeaturesListSelectionListener"); 431 if(!features_list.isSelectionEmpty()) { 432 // Determine the features name. Remember to remove our helpful source prefix (delimited by ':'). 433 BobTheMagicalComparableWrapper selected_feature = (BobTheMagicalComparableWrapper)features_list.getSelectedValue(); 434 // Retrieve the default language translation, or otherwise the first match, to be default text. 435 CollectionMeta default_metadata = CollectionDesignManager.collectionmeta_manager.getMetadatum(selected_feature.getName()); 436 if(default_metadata != null) { 437 default_area.setText(default_metadata.getValue()); 438 } 439 // Update the text fragment table. 440 fragment_table.clearSelection(); 441 fragment_table_model.setData(CollectionDesignManager.collectionmeta_manager.getMetadata(selected_feature.getName())); 442 selected_feature = null; 443 // Now we check whatever value is currently selected in the combobox to see if it is valid to add. 444 String language_name = (String) language_combobox.getSelectedItem(); 445 int index = fragment_table_model.getMetadataIndexByLanguage(language_name); 446 if(index != -1) { 447 CollectionMeta metadata = fragment_table_model.getMetadata(index); 448 fragment_table.setRowSelectionInterval(index, index); 449 translation_area.setText(metadata.getValue()); 450 metadata = null; 361 451 } 362 452 else { 363 default_area.setText("");364 fragment_table.clearSelection();365 fragment_table_model.setData(new ArrayList());366 453 translation_area.setText(""); 367 // Update and disable the text area368 translation_area.setText("");369 translation_area.setEnabled(false);370 translation_area.setBackground(Gatherer.config.getColor("coloring.disabled", false));371 454 } 372 ignore_event = false; 455 // Update and enable the text area 456 translation_area.setEnabled(true); 457 translation_area.setBackground(Gatherer.config.getColor("coloring.editable_background", false)); 458 } 459 else { 460 default_area.setText(""); 461 fragment_table.clearSelection(); 462 fragment_table_model.setData(new ArrayList()); 463 translation_area.setText(""); 464 // Update and disable the text area 465 translation_area.setText(""); 466 translation_area.setEnabled(false); 467 translation_area.setBackground(Gatherer.config.getColor("coloring.disabled", false)); 373 468 } 374 469 } … … 380 475 public void valueChanged(ListSelectionEvent event) { 381 476 if(!event.getValueIsAdjusting() && !ignore_event) { 382 ignore_event = true;383 477 ///ystem.err.println("FragmentListSelectionListener"); 384 478 int index = -1; … … 397 491 } 398 492 translation_area.setText(metadata.getValue()); 493 remove_button.setEnabled(true); 399 494 } 400 495 else { 401 496 translation_area.setText(""); 402 }403 ignore_event = false;497 remove_button.setEnabled(false); 498 } 404 499 } 405 500 } … … 446 541 switch(column) { 447 542 case 0: 448 return metadatum.getLanguage();543 return CollectionDesignManager.language_manager.getLanguageName(metadatum.getLanguage()); 449 544 default: 450 545 return metadatum.getValue(); … … 534 629 /** The text area has changed in some way. Given that this can only happed when we are editing or adding a text fragment we better respond appropriately. */ 535 630 private void update() { 536 if(!ignore_event) { 537 ignore_event = true; 538 String translation_text = translation_area.getText(); 539 // If there is no current fragment table selection, but translation text is not an empty string, then this is a new fragment. Create new collection metadata, refresh the fragment table, then ensure that the new metadata is selected. Remember that it is the selected metadata to which changes will be applied. 540 int index = -1; 541 if((index = fragment_table.getSelectedRow()) == -1 && translation_text.length() > 0) { 542 BobTheMagicalComparableWrapper selected_feature = (BobTheMagicalComparableWrapper)features_list.getSelectedValue(); 543 String language = (String) language_combobox.getSelectedItem(); 544 CollectionMeta metadatum = new CollectionMeta(selected_feature.getName(), language); 545 metadatum.setValue(translation_text); 546 CollectionDesignManager.collectionmeta_manager.addMetadatum(metadatum); 547 fragment_table.clearSelection(); 548 ArrayList metadata = CollectionDesignManager.collectionmeta_manager.getMetadata(selected_feature.getName()); 549 fragment_table_model.setData(metadata); 550 index = fragment_table_model.getMetadataIndexByLanguage(language); 551 fragment_table.setRowSelectionInterval(index, index); 552 metadatum = null; 553 language = null; 554 selected_feature = null; 555 } 556 else { 557 CollectionMeta metadata = fragment_table_model.getMetadata(index); 558 // If the text is now empty, and there was previously a metadata fragment selected, then remove the fragments metadata and update the table 559 if(translation_text.length() == 0) { 560 ///ystem.err.println("Removing collectionmeta! fireTableRowsDeleted(" + index + "," + index + ")"); 561 CollectionDesignManager.collectionmeta_manager.removeMetadata(metadata); 562 fragment_table_model.remove(index); 563 } 564 // Otherwise update the fragment metadata and ask the table to repaint the appropriate row 565 else { 566 ///ystem.err.println("Updating collectionmeta!"); 567 metadata.setValue(translation_text); 568 fragment_table_model.fireTableRowsUpdated(index, index); 569 } 570 metadata = null; 571 } 572 translation_text = null; 573 ignore_event = false; 574 } 631 String translation_text = translation_area.getText(); 632 // 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 633 String language = (String) language_combobox.getSelectedItem(); 634 add_button.setEnabled(translation_text.length() > 0 && fragment_table_model.getMetadataIndexByLanguage(language) == -1); 635 language = null; 636 // 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. 637 if(fragment_table.getSelectedRowCount() > 0) { 638 replace_button.setEnabled(!translation_text.equals(fragment_table.getValueAt(fragment_table.getSelectedRow(), 1))); 639 } 640 // Nothing selected, nothing to replace 641 else { 642 replace_button.setEnabled(false); 643 } 644 translation_text = null; 575 645 } 576 646 }
Note:
See TracChangeset
for help on using the changeset viewer.