Changeset 5206 for trunk/gli


Ignore:
Timestamp:
2003-08-19T15:29:23+12:00 (21 years ago)
Author:
jmt12
Message:

Fix 203B122 and 203B149

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gli/src/org/greenstone/gatherer/cdm/TranslationView.java

    r5090 r5206  
    188188    private boolean ignore_event = false;
    189189    private FragmentTableModel fragment_table_model;
     190    private JButton add_button;
     191    private JButton remove_button;
     192    private JButton replace_button;
    190193    private JComboBox language_combobox;
    191194    private JList features_list;
     
    255258        translation_area.setWrapStyleWord(true);
    256259
     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
    257271        // Connection
     272        add_button.addActionListener(new AddListener());
     273        remove_button.addActionListener(new RemoveListener());
     274        replace_button.addActionListener(new ReplaceListener());
    258275        language_combobox.addActionListener(new LanguageActionListener());
    259276        translation_area.getDocument().addDocumentListener(new TranslationDocumentListener());
    260277        features_list.addListSelectionListener(new FeaturesListSelectionListener());
    261278        fragment_table.getSelectionModel().addListSelectionListener(new FragmentListSelectionListener());
     279
    262280        // Layout
    263281        header_panel.setBorder(BorderFactory.createEmptyBorder(0,0,5,0));
     
    302320        center_panel.add(south_panel);
    303321
     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
    304328        setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
    305329        setLayout(new BorderLayout());
    306330        add(header_panel, BorderLayout.NORTH);
    307331        add(center_panel, BorderLayout.CENTER);
     332        add(button_pane, BorderLayout.SOUTH);
    308333    }
    309334
     
    325350    }
    326351
     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
    327426    private class FeaturesListSelectionListener
    328427        implements ListSelectionListener {
    329428        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;
    361451            }
    362452            else {
    363                 default_area.setText("");
    364                 fragment_table.clearSelection();
    365                 fragment_table_model.setData(new ArrayList());
    366453                translation_area.setText("");
    367                 // Update and disable the text area
    368                 translation_area.setText("");
    369                 translation_area.setEnabled(false);
    370                 translation_area.setBackground(Gatherer.config.getColor("coloring.disabled", false));
    371454            }
    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));
    373468            }
    374469        }
     
    380475        public void valueChanged(ListSelectionEvent event) {
    381476        if(!event.getValueIsAdjusting() && !ignore_event) {
    382             ignore_event = true;
    383477            ///ystem.err.println("FragmentListSelectionListener");
    384478            int index = -1;
     
    397491            }
    398492            translation_area.setText(metadata.getValue());
     493            remove_button.setEnabled(true);
    399494            }
    400495            else {
    401496            translation_area.setText("");
    402             }
    403             ignore_event = false;
     497            remove_button.setEnabled(false);
     498            }
    404499        }
    405500        }
     
    446541            switch(column) {
    447542            case 0:
    448             return metadatum.getLanguage();
     543            return CollectionDesignManager.language_manager.getLanguageName(metadatum.getLanguage());
    449544            default:
    450545            return metadatum.getValue();
     
    534629        /** 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. */
    535630        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;
    575645        }
    576646    }
Note: See TracChangeset for help on using the changeset viewer.