Changeset 12278
- Timestamp:
- 2006-07-24T11:26:58+12:00 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gli/src/org/greenstone/gatherer/cdm/LanguageManager.java
r12123 r12278 33 33 import java.util.*; 34 34 import javax.swing.*; 35 import javax.swing.border.*; 35 36 import javax.swing.event.*; 36 37 import org.greenstone.gatherer.Configuration; … … 39 40 import org.greenstone.gatherer.Gatherer; 40 41 import org.greenstone.gatherer.gui.GLIButton; 42 import org.greenstone.gatherer.util.CheckList; 43 import org.greenstone.gatherer.util.CheckListEntry; 41 44 import org.greenstone.gatherer.util.JarTools; 42 45 import org.greenstone.gatherer.util.XMLTools; … … 77 80 // Load a series of code->language mappings into known_languages, by reading from the 'languages.xml' file, which is essentially a subset of the ISO 639 Standard. 78 81 known_languages = new LinkedHashMap(); 79 /*80 try {81 File in_file = new File("languages.dat");82 FileReader in_reader = new FileReader(in_file);83 BufferedReader in = new BufferedReader(in_reader);84 String entry = null;85 while((entry = in.readLine()) != null) {86 if(!entry.startsWith("#")) {87 StringTokenizer tokenizer = new StringTokenizer(entry);88 if(tokenizer.countTokens() >= 2) {89 String name = tokenizer.nextToken();90 String code = tokenizer.nextToken().toLowerCase();91 known_languages.put(code, name);92 }93 }94 }95 in.close();96 in_reader.close();97 in = null;98 in_reader = null;99 in_file = null;100 }101 catch (Exception error) {102 error.printStackTrace();103 }104 */105 82 NodeList language_elements = LANGUAGES_DOCUMENT.getDocumentElement().getElementsByTagName(CollectionConfiguration.LANGUAGE_ELEMENT); 106 83 for(int i = 0; i < language_elements.getLength(); i++) { … … 122 99 private void addLanguage(Language language) { 123 100 if(!contains(language)) { 124 Element element = language.getElement(); 125 append(language); 101 // need to add a pseudo metadata 102 CollectionMeta metadatum = new CollectionMeta(CollectionConfiguration.STOP_CHARACTER + language.getCode()); 103 metadatum.setValue(language.getName()); 104 CollectionDesignManager.collectionmeta_manager.addMetadatum(metadatum); 105 add(getSize(), language); 126 106 Gatherer.c_man.configurationChanged(); 127 107 } … … 148 128 return controls; 149 129 } 150 151 /** Method to retrieve the default language code. 152 * @return A <strong>Language</strong> containing a two letter code. 153 */ 154 /* private Language getDefaultLanguage() { 155 // If no default is set... 156 if(default_language != null && default_language.isAssigned()) { 157 return default_language; 158 } 159 return null; 160 } */ 161 130 162 131 /** Method to retrieve a certain language object by its code. 163 132 * @param code The two letter code of a language, as a <strong>String</strong>. … … 239 208 private void removeLanguage(Language language) { 240 209 remove(language); 210 // Remove any collection metadata for this language 211 CollectionDesignManager.collectionmeta_manager.removeMetadata(CollectionConfiguration.STOP_CHARACTER + language.getCode()); 241 212 if(default_language != null && default_language.equals(language)) { 242 default_language = null;213 setDefault(null); 243 214 } 244 215 Gatherer.c_man.configurationChanged(); 245 216 } 246 217 218 private void replaceLanguage(Language old_language, Language new_language) { 219 // Remove old lang collection meta 220 CollectionDesignManager.collectionmeta_manager.removeMetadata(CollectionConfiguration.STOP_CHARACTER + old_language.getCode()); 221 // Add new one 222 CollectionMeta metadatum = new CollectionMeta(CollectionConfiguration.STOP_CHARACTER + new_language.getCode()); 223 metadatum.setValue(new_language.getName()); 224 CollectionDesignManager.collectionmeta_manager.addMetadatum(metadatum); 225 if(default_language != null && default_language.equals(old_language)) { 226 setDefault(new_language); 227 } 228 229 // get the position of the old one 230 int position = indexOf(old_language); 231 remove(old_language); 232 add(position, new_language); 233 234 // Schedule the collection for saving 235 Gatherer.c_man.configurationChanged(); 236 237 } 247 238 /** Method to set the default language. 248 239 * @param language The <strong>Language</strong> to use as a default, or <i>null</i> for no default. … … 280 271 extends JPanel 281 272 implements Control { 273 /** The list of available languages */ 274 private CheckList language_list = null; 282 275 /** The button to add a new language support. */ 283 276 private JButton add_button = null; 277 /** The button to replace a language support. */ 278 private JButton replace_button = null; 284 279 /** The button to remove a supported language. */ 285 280 private JButton remove_button = null; … … 291 286 private JButton set_default_button = null; 292 287 /** A combobox listing the available supported languages. */ 293 private JComboBox language_combobox = null;288 //private JComboBox language_combobox = null; 294 289 /** A list of currently supported languages. */ 295 290 private JList selected_languages_list = null; … … 317 312 JLabel selector_label = new JLabel(Dictionary.get("CDM.LanguageManager.Selector")); 318 313 319 language_combobox = new JComboBox(getLanguageCodes().toArray()); 320 language_combobox.setPreferredSize(COMPONENT_SIZE); 321 language_combobox.setBackground(Configuration.getColor("coloring.collection_tree_background", false)); 322 language_combobox.setRenderer(new LanguageListCellRenderer()); 323 language_combobox.setToolTipText(Dictionary.get("CDM.LanguageManager.Selector_Tooltip")); 324 314 language_list = new CheckList(false); 315 language_list.setListData(getLanguageCodes()); 316 language_list.setToolTipText(Dictionary.get("CDM.LanguageManager.Selector_Tooltip")); 317 language_list.setCellRenderer(new LanguageCheckListCellRenderer()); 318 325 319 JPanel movement_pane = new JPanel(); 326 320 move_up_button = new GLIButton(Dictionary.get("CDM.Move.Move_Up"), JarTools.getImage("arrow-up.gif"), Dictionary.get("CDM.Move.Move_Up_Tooltip")); … … 335 329 JPanel button_panel = new JPanel(); 336 330 337 add_button = new GLIButton(Dictionary.get("CDM.LanguageManager.Add"), Dictionary.get("CDM.LanguageManager.Add_Tooltip")); 338 339 if (getLanguage((String)language_combobox.getItemAt(0))==null) { 340 add_button.setEnabled(true); 341 } else { 342 add_button.setEnabled(false); 343 } 344 remove_button = new GLIButton(Dictionary.get("CDM.LanguageManager.Remove"), Dictionary.get("CDM.LanguageManager.Remove_Tooltip")); 331 add_button = new GLIButton(Dictionary.get("CDM.SubcollectionIndexManager.Add_Subindex"), Dictionary.get("CDM.LanguageManager.Add_Tooltip")); 332 add_button.setEnabled(false); 333 334 replace_button = new GLIButton(Dictionary.get("CDM.SubcollectionIndexManager.Replace_Subindex"), Dictionary.get("CDM.LanguageManager.Replace_Tooltip")); 335 replace_button.setEnabled(false); 336 337 remove_button = new GLIButton(Dictionary.get("CDM.SubcollectionIndexManager.Remove_Subindex"), Dictionary.get("CDM.LanguageManager.Remove_Tooltip")); 345 338 remove_button.setEnabled(false); 346 339 … … 354 347 remove_button.addActionListener(new RemoveListener()); 355 348 remove_button.addActionListener(CollectionDesignManager.buildcol_change_listener); 356 language_combobox.addActionListener(new SelectorListener()); 349 replace_button.addActionListener(new ReplaceListener()); 350 replace_button.addActionListener(CollectionDesignManager.buildcol_change_listener); 351 352 language_list.addListSelectionListener(new LanguageListListener()); 353 357 354 set_default_button.addActionListener(new SetDefaultListener()); 358 355 set_default_button.addActionListener(CollectionDesignManager.buildcol_change_listener); … … 360 357 361 358 // Layout components 359 button_panel.setLayout(new GridLayout(1,3)); 360 button_panel.add(add_button); 361 button_panel.add(replace_button); 362 button_panel.add(remove_button); 363 362 364 movement_pane.setBorder(BorderFactory.createEmptyBorder(0,2,0,0)); 363 365 movement_pane.setLayout(new GridLayout(3,1)); … … 369 371 control_panel.setLayout(new BorderLayout()); 370 372 control_panel.add(selector_label, BorderLayout.WEST); 371 control_panel.add(language_combobox, BorderLayout.CENTER); 373 control_panel.add(new JScrollPane(language_list), BorderLayout.CENTER); 374 control_panel.add(button_panel, BorderLayout.SOUTH); 372 375 373 376 center_panel.setLayout(new BorderLayout()); … … 375 378 center_panel.add(new JScrollPane(selected_languages_list), BorderLayout.CENTER); 376 379 center_panel.add(movement_pane, BorderLayout.EAST); 377 center_panel.add(control_panel, BorderLayout.SOUTH); 378 379 button_panel.setLayout(new GridLayout(1,2)); 380 button_panel.add(add_button); 381 button_panel.add(remove_button); 382 // button_panel.add(set_button); 383 // button_panel.add(clear_button); 384 385 //when we go to a multi list, remove inner_panel and empty_panel 386 JPanel empty_panel = new JPanel(); 387 JPanel inner_panel = new JPanel(); 388 389 inner_panel.setLayout(new BorderLayout()); 390 inner_panel.add(center_panel, BorderLayout.CENTER); 391 inner_panel.add(button_panel, BorderLayout.SOUTH); 380 392 381 setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); 393 382 setLayout(new BorderLayout()); 394 //add(center_panel, BorderLayout.CENTER); 395 //add(button_panel, BorderLayout.SOUTH); 396 add(inner_panel, BorderLayout.NORTH); 397 add(empty_panel, BorderLayout.CENTER); 383 add(center_panel, BorderLayout.NORTH); 384 add(control_panel, BorderLayout.CENTER); 398 385 } 399 386 … … 408 395 } 409 396 397 398 private void clearControls() { 399 selected_languages_list.clearSelection(); 400 language_list.clearTicked(); 401 add_button.setEnabled(false); 402 remove_button.setEnabled(false); 403 replace_button.setEnabled(false); 404 set_default_button.setEnabled(false); 405 move_down_button.setEnabled(false); 406 move_up_button.setEnabled(false); 407 408 } 409 410 private void updateControlsWithSelectedLanguage() 411 { 412 Language selected_lang = (Language) selected_languages_list.getSelectedValue(); 413 if (selected_lang == null) { 414 clearControls(); 415 return; 416 } 417 418 // Display the selected subcollection index's sources 419 language_list.clearTicked(); 420 language_list.setTickedObjects(selected_lang.getCode().split(",")); 421 422 } 423 424 private void validateButtons() { 425 boolean add_enabled = false; 426 boolean replace_enabled = false; 427 428 if (!language_list.isNothingTicked()) { 429 // Create a dummy Langauge and see if its in the collection 430 ArrayList langs = language_list.getTicked(); 431 StringBuffer code_str = new StringBuffer(); 432 boolean first = true; 433 for (int i=0; i<langs.size(); i++) { 434 if (!first) { 435 code_str.append(","); 436 } else { 437 first = false; 438 } 439 code_str.append(langs.get(i)); 440 } 441 String lang_str = code_str.toString(); 442 443 if (!model.contains(lang_str)) { 444 add_enabled = true; 445 if (!selected_languages_list.isSelectionEmpty()) { 446 replace_enabled = true; 447 } 448 } 449 450 } 451 add_button.setEnabled(add_enabled); 452 replace_button.setEnabled(replace_enabled); 453 } 454 410 455 /** Listens for actions apon the 'add' button in the LanguageManager controls, and if detected calls the add method of the manager with a newly created language. */ 411 456 private class AddListener … … 416 461 */ 417 462 public void actionPerformed(ActionEvent event) { 418 String language_code = (String) language_combobox.getSelectedItem(); 419 if(language_code != null) { 420 addLanguage(new Language(language_code)); 421 } 422 // add some collectionmeta 423 String lang_name = getLanguageName(language_code); 424 CollectionMeta metadatum = new CollectionMeta("." + language_code); 425 metadatum.setValue(lang_name); 426 CollectionDesignManager.collectionmeta_manager.addMetadatum(metadatum); 427 428 add_button.setEnabled(false); 463 if (!language_list.isNothingTicked()) { 464 ArrayList langs = language_list.getTicked(); 465 addLanguage(new Language(language_list.getTicked())); 466 clearControls(); 467 } 429 468 } 430 469 } … … 440 479 Language delete_me = (Language)selected_languages_list.getSelectedValue(); 441 480 if(delete_me != null) { 442 // Remove any current metadata for this language443 CollectionDesignManager.collectionmeta_manager.removeMetadata("." + delete_me.getCode());444 481 removeLanguage(delete_me); 445 if(default_language != null && default_language.equals(delete_me)) { 446 setDefault(null); 447 //clear_button.setEnabled(false); 448 //default_language_field.setText(""); 449 } 450 } 451 remove_button.setEnabled(false); 452 } 453 } 454 455 /** Listens for selections within the combobox on the LanguageManager controls, and if a change is detected enables, or disables, controls appropriately. */ 456 private class SelectorListener 482 } 483 } 484 } 485 486 private class ReplaceListener 457 487 implements ActionListener { 458 /** Enable or disable controls depeding on selection. 459 * @param event An <strong>ActionEvent</strong>. 460 */ 488 461 489 public void actionPerformed(ActionEvent event) { 462 String language_code = (String) language_combobox.getSelectedItem(); 463 if(language_code != null && getLanguage(language_code) == null) { 464 add_button.setEnabled(true); 465 } 466 else { 467 add_button.setEnabled(false); 468 } 469 } 470 } 471 490 if (selected_languages_list.isSelectionEmpty() || language_list.isNothingTicked()) { 491 // This should never happen, but just in case... 492 replace_button.setEnabled(false); 493 return; 494 } 495 Language old_language = (Language) selected_languages_list.getSelectedValue(); 496 Language new_language = new Language(language_list.getTicked()); 497 replaceLanguage(old_language, new_language); 498 499 } 500 } 501 502 private class LanguageListListener 503 implements ListSelectionListener { 504 505 public void valueChanged(ListSelectionEvent event) { 506 if (event.getValueIsAdjusting()) { 507 return; 508 } 509 validateButtons(); 510 } 511 } 512 472 513 /** Listens for actions apon the 'set default' button in the LanguageManager controls, and if detected calls the <i>setDefault()</i> method of the manager with the language selected for default. */ 473 514 private class SetDefaultListener … … 481 522 if(selected_language != null) { 482 523 setDefault(selected_language); 483 //clear_button.setEnabled(true);484 524 // This should cause a repaint of just the desired row 485 525 selected_languages_list.setSelectedValue(selected_language, true); … … 523 563 } 524 564 if(selected_languages_list.isSelectionEmpty()) { 525 remove_button.setEnabled(false); 526 set_default_button.setEnabled(false); 527 move_down_button.setEnabled(false); 528 move_up_button.setEnabled(false); 565 clearControls(); 529 566 return; 530 567 } … … 534 571 Language selected_lang = (Language)selected_languages_list.getSelectedValue(); 535 572 remove_button.setEnabled(true); 573 replace_button.setEnabled(false); 574 add_button.setEnabled(false); 536 575 set_default_button.setEnabled(default_language == null || !default_language.equals(selected_lang)); 537 576 … … 548 587 move_down_button.setEnabled(false); 549 588 } 589 updateControlsWithSelectedLanguage(); 550 590 } 551 591 } … … 564 604 } 565 605 } 606 607 /** A custom list cell renderer for producing rows which contain clickable check boxes. */ 608 private class LanguageCheckListCellRenderer 609 implements ListCellRenderer 610 { 611 /** Return a component that has been configured to display the specified value. That component's paint method is then called to "render" the cell. If it is necessary to compute the dimensions of a list because the list cells do not have a fixed size, this method is called to generate a component on which getPreferredSize can be invoked. 612 * @param list The </strong>JList</strong> we're painting. 613 * @param value The value returned by list.getModel().getElementAt(index), as an <strong>Object</strong>. 614 * @param index The cells index as an <i>int</i>. 615 * @param is_selected <i>true</i> if the specified cell was selected, <i>false</i> otherwise. 616 * @param cell_has_focus <i>true</i> if and only if the specified cell has the focus. 617 * @return A <strong>Component</strong> whose paint() method will render the specified value. 618 */ 619 public Component getListCellRendererComponent(JList list, Object value, int index, boolean is_selected, boolean cell_has_focus) { 620 JCheckBox checkbox = (JCheckBox) value; 621 checkbox.setBackground(list.getBackground()); 622 checkbox.setForeground(list.getForeground()); 623 checkbox.setBorderPainted(false); 624 checkbox.setEnabled(list.isEnabled()); 625 checkbox.setFont(list.getFont()); 626 checkbox.setFocusPainted(false); 627 checkbox.setBorder((is_selected) ? UIManager.getBorder("List.focusCellHighlightBorder") : new EmptyBorder(1, 1, 1, 1)); 628 629 String code = (String)((CheckListEntry)list.getModel().getElementAt(index)).getObject(); 630 checkbox.setText((String)known_languages.get(code)); 631 632 return checkbox; 633 } 634 } 635 566 636 }
Note:
See TracChangeset
for help on using the changeset viewer.