Changeset 6569


Ignore:
Timestamp:
2004-01-21T11:21:57+13:00 (20 years ago)
Author:
jmt12
Message:

JScrollPane now right aligned for right aligned languages

File:
1 edited

Legend:

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

    r6539 r6569  
    189189    /** The panel containing the set list. */
    190190    private JPanel set_pane = null;
     191
     192    private JScrollPane element_list_scroll_pane;
    191193    /** The text area of inline instructions. */
    192194    private JTextArea instructions = null;
    193195
    194196    private ListListener list_listener;
     197
     198    private MultilingualListCellRenderer element_list_cell_renderer;
     199
    195200    /** The element model for the currently selected set. */
    196201    private Vector element_model = null;
     
    209214        element_label.setOpaque(true);
    210215        Dictionary.registerText(element_label, "CDM.MetadataSetManager.Elements");
     216        element_list_scroll_pane = new JScrollPane();
     217        element_list_cell_renderer = new MultilingualListCellRenderer(element_list_scroll_pane);
    211218        element_list = new JList();
     219        element_list_scroll_pane.setViewportView(element_list);
     220        element_list.setCellRenderer(element_list_cell_renderer);
    212221        element_list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    213222        element_pane = new JPanel();
     
    271280        element_pane.setLayout(new BorderLayout());
    272281        element_pane.add(element_label, BorderLayout.NORTH);
    273         element_pane.add(new JScrollPane(element_list), BorderLayout.CENTER);
     282        element_pane.add(element_list_scroll_pane, BorderLayout.CENTER);
    274283
    275284        central_pane.setLayout(new GridLayout(2,1));
     
    336345        if(set_list.isSelectionEmpty() && set_list.getModel().getSize() > 0) {
    337346        set_list.setSelectedIndex(0);
    338         MetadataSet set = ((SetWrapper)set_list.getSelectedValue()).getSet();
    339         NodeList elements = set.getElements();
    340         element_model = new Vector();
    341         for(int i = 0; i < elements.getLength(); i++) {
    342             element_model.add(new ElementWrapper(elements.item(i)));
    343         }
    344         element_list.setListData(element_model);
    345         configure_button.setEnabled(true);
    346         remove_button.setEnabled(true);
    347         elements = null;
    348         set = null;
     347        list_listener.valueChanged(new ListSelectionEvent(set_list, 0, 0, true));
    349348        }
    350349    }
     
    411410        implements ListSelectionListener {
    412411        public void valueChanged(ListSelectionEvent event) {
     412        // Wait until we get a stable event
     413        if(event.getValueIsAdjusting()) {
     414            return;
     415        }
     416        // Now we can process it
    413417        if(!set_list.isSelectionEmpty()) {
    414418            MetadataSet set = ((SetWrapper)set_list.getSelectedValue()).getSet();
     
    422426            configure_button.setEnabled(true);
    423427            remove_button.setEnabled(true);
     428
     429            // Finally check the directionality and scroll as necessary
     430            JScrollBar scroll_bar = element_list_scroll_pane.getHorizontalScrollBar();
     431            if(element_list_cell_renderer.getDirectionality() == Character.DIRECTIONALITY_RIGHT_TO_LEFT) {
     432            scroll_bar.setValue(scroll_bar.getMaximum());
     433            }
     434            else {
     435            scroll_bar.setValue(scroll_bar.getMinimum());
     436            }
     437
    424438        }
    425439        else {
     
    452466        }
    453467        }
    454     }   
     468    }
     469
     470    private class MultilingualListCellRenderer
     471        extends DefaultListCellRenderer {
     472        private byte previous_directionality = Character.DIRECTIONALITY_UNDEFINED;
     473        private JScrollPane scroll_pane;
     474        public MultilingualListCellRenderer(JScrollPane scroll_pane) {
     475        super();
     476        this.scroll_pane = scroll_pane;
     477        }
     478
     479        public byte getDirectionality() {
     480        if(previous_directionality == Character.DIRECTIONALITY_RIGHT_TO_LEFT || previous_directionality == Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC || previous_directionality == Character.DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING || previous_directionality == Character.DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE) {
     481            return Character.DIRECTIONALITY_RIGHT_TO_LEFT;
     482        }
     483        else {
     484            return Character.DIRECTIONALITY_LEFT_TO_RIGHT;
     485        }
     486        }
     487       
     488        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
     489        JLabel component = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
     490        // Determine if the text should be left aligned or right aligned
     491        String text = value.toString();
     492        int text_index = 0;
     493        byte directionality = Character.DIRECTIONALITY_UNDEFINED;
     494        while(directionality == Character.DIRECTIONALITY_UNDEFINED && text_index < text.length()) {
     495            directionality = Character.getDirectionality(text.charAt(text_index));
     496            text_index++;
     497        }
     498        if(directionality != previous_directionality) {
     499            previous_directionality = directionality;
     500            if(directionality == Character.DIRECTIONALITY_RIGHT_TO_LEFT || directionality == Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC || directionality == Character.DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING || directionality == Character.DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE) {
     501            ///ystem.err.println("R2L for: " + text);
     502            component.setHorizontalAlignment(JLabel.TRAILING);
     503            component.setHorizontalTextPosition(JLabel.TRAILING);
     504            component.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
     505            //scroll_pane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
     506            }
     507            else {
     508            component.setHorizontalAlignment(JLabel.LEADING);
     509            component.setHorizontalTextPosition(JLabel.LEADING);
     510            ///ystem.err.println("L2R for: " + text);
     511            component.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
     512            //scroll_pane.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
     513            }
     514        }
     515
     516        text = null;
     517        return component;
     518        }
     519
     520    }
     521   
    455522    }
    456523
Note: See TracChangeset for help on using the changeset viewer.