Changeset 6569
- Timestamp:
- 2004-01-21T11:21:57+13:00 (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gli/src/org/greenstone/gatherer/cdm/MetadataSetView.java
r6539 r6569 189 189 /** The panel containing the set list. */ 190 190 private JPanel set_pane = null; 191 192 private JScrollPane element_list_scroll_pane; 191 193 /** The text area of inline instructions. */ 192 194 private JTextArea instructions = null; 193 195 194 196 private ListListener list_listener; 197 198 private MultilingualListCellRenderer element_list_cell_renderer; 199 195 200 /** The element model for the currently selected set. */ 196 201 private Vector element_model = null; … … 209 214 element_label.setOpaque(true); 210 215 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); 211 218 element_list = new JList(); 219 element_list_scroll_pane.setViewportView(element_list); 220 element_list.setCellRenderer(element_list_cell_renderer); 212 221 element_list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 213 222 element_pane = new JPanel(); … … 271 280 element_pane.setLayout(new BorderLayout()); 272 281 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); 274 283 275 284 central_pane.setLayout(new GridLayout(2,1)); … … 336 345 if(set_list.isSelectionEmpty() && set_list.getModel().getSize() > 0) { 337 346 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)); 349 348 } 350 349 } … … 411 410 implements ListSelectionListener { 412 411 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 413 417 if(!set_list.isSelectionEmpty()) { 414 418 MetadataSet set = ((SetWrapper)set_list.getSelectedValue()).getSet(); … … 422 426 configure_button.setEnabled(true); 423 427 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 424 438 } 425 439 else { … … 452 466 } 453 467 } 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 455 522 } 456 523
Note:
See TracChangeset
for help on using the changeset viewer.