Changeset 9563
- Timestamp:
- 2005-04-06T10:14:53+12:00 (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gli/src/org/greenstone/gatherer/cdm/LanguageManager.java
r8243 r9563 138 138 known_languages.clear(); 139 139 known_languages = null; 140 default_language = null; 140 141 } 141 142 … … 192 193 } 193 194 195 private int moveLanguage(Language lang, boolean move_up) 196 { 197 // Determine the current position of the language 198 int position = indexOf(lang); 199 int new_position; 200 201 // Attempt to move the language up 202 if (move_up) { 203 // Check it's not already at the top 204 if (position == 0) { 205 return position; 206 } 207 208 // This automatically removes the language first, as an Element can only exist once in a particular document 209 new_position = position - 1; 210 addBefore(lang, (Language) getElementAt(new_position)); 211 } 212 213 // Attempt to move the language down 214 else { 215 // Check it's not already at the bottom 216 if (position == (getSize()) - 1) { 217 return position; 218 } 219 220 // This automatically removes the language first, as an Element can only exist once in a particular document 221 new_position = position + 1; 222 addAfter(lang, (Language) getElementAt(new_position)); 223 } 224 225 // Schedule the collection for saving 226 Gatherer.c_man.configurationChanged(); 227 return new_position; 228 } 229 194 230 /** Method to remove a certain language. 195 231 * @param language The <strong>Language</strong> to remove. … … 201 237 if(default_language != null && default_language.equals(language)) { 202 238 default_language = null; 203 ((LanguageControl)controls).clearDefaultLanguage();204 239 } 205 240 Gatherer.c_man.configurationChanged(); … … 243 278 /** The button to add a new language support. */ 244 279 private JButton add_button = null; 245 /** The button to clear the current default language. */246 private JButton clear_button = null;247 280 /** The button to remove a supported language. */ 248 281 private JButton remove_button = null; 282 /** button to move a language up in the list */ 283 private JButton move_down_button; 284 /** button to move a language down in the list */ 285 private JButton move_up_button; 249 286 /** The button to set the current language as the default one. */ 250 private JButton set_ button = null;287 private JButton set_default_button = null; 251 288 /** A combobox listing the available supported languages. */ 252 private JComboBox selector_combobox = null;289 private JComboBox language_combobox = null; 253 290 /** A list of currently supported languages. */ 254 private JList language_list = null; 255 /** A description of the language currently selected. */ 256 private JTextArea description_textarea = null; 257 /** The text field showing the currently name of the default language. Non-editable. */ 258 private JTextField default_language_field = null; 291 private JList selected_languages_list = null; 259 292 /** Constructor. 260 293 * @see org.greenstone.gatherer.cdm.LanguageManager.LanguageControl.AddListener … … 270 303 JPanel center_panel = new JPanel(); 271 304 272 JLabel language_list_label = new JLabel(); 273 Dictionary.registerText(language_list_label, "CDM.LanguageManager.Assigned_Languages"); 274 language_list = new JList(model); 275 305 JLabel selected_languages_list_label = new JLabel(); 306 Dictionary.registerText(selected_languages_list_label, "CDM.LanguageManager.Assigned_Languages"); 307 selected_languages_list = new JList(model); 308 selected_languages_list.setCellRenderer(new MyLanguageListCellRenderer()); 309 selected_languages_list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 310 selected_languages_list.setVisibleRowCount(5); 276 311 JPanel details_panel = new JPanel(); 277 312 278 JPanel default_panel = new JPanel();279 280 JLabel default_label = new JLabel();281 default_label.setBorder(BorderFactory.createEmptyBorder(0,0,0,5));282 Dictionary.registerText(default_label, "CDM.LanguageManager.Default_Language");283 284 if(default_language == null) {285 default_language_field = new JTextField();286 }287 else {288 default_language_field = new JTextField(default_language.toString());289 }290 default_language_field.setPreferredSize(COMPONENT_SIZE);291 default_language_field.setBackground(Configuration.getColor("coloring.collection_tree_background", false));292 default_language_field.setEditable(false);293 313 JPanel control_panel = new JPanel(); 294 295 314 JLabel selector_label = new JLabel(); 296 315 Dictionary.registerText(selector_label, "CDM.LanguageManager.Selector"); 297 316 298 selector_combobox = new JComboBox(getLanguageCodes().toArray()); 299 selector_combobox.setPreferredSize(COMPONENT_SIZE); 300 selector_combobox.setBackground(Configuration.getColor("coloring.collection_tree_background", false)); 301 selector_combobox.setRenderer(new LanguageListCellRenderer()); 302 Dictionary.registerTooltip(selector_combobox, "CDM.LanguageManager.Selector_Tooltip"); 317 language_combobox = new JComboBox(getLanguageCodes().toArray()); 318 language_combobox.setPreferredSize(COMPONENT_SIZE); 319 language_combobox.setBackground(Configuration.getColor("coloring.collection_tree_background", false)); 320 language_combobox.setRenderer(new LanguageListCellRenderer()); 321 Dictionary.registerTooltip(language_combobox, "CDM.LanguageManager.Selector_Tooltip"); 322 323 JPanel movement_pane = new JPanel(); 324 move_up_button = new JButton("", Utility.getImage("arrow-up.gif")); 325 move_up_button.setEnabled(false); 326 move_up_button.setMnemonic(KeyEvent.VK_U); 327 Dictionary.registerBoth(move_up_button, "CDM.Move.Move_Up", "CDM.Move.Move_Up_Tooltip"); 328 329 move_down_button = new JButton("", Utility.getImage("arrow-down.gif")); 330 move_down_button.setEnabled(false); 331 move_down_button.setMnemonic(KeyEvent.VK_D); 332 Dictionary.registerBoth(move_down_button, "CDM.Move.Move_Down", "CDM.Move.Move_Down_Tooltip"); 333 334 set_default_button = new GLIButton(); 335 set_default_button.setEnabled(false); 336 set_default_button.setMnemonic(KeyEvent.VK_S); 337 Dictionary.registerBoth(set_default_button, "CDM.LanguageManager.Set_Default", "CDM.LanguageManager.Set_Default_Tooltip"); 303 338 304 339 JPanel button_panel = new JPanel(); … … 307 342 add_button.setMnemonic(KeyEvent.VK_A); 308 343 Dictionary.registerBoth(add_button, "CDM.LanguageManager.Add", "CDM.LanguageManager.Add_Tooltip"); 309 344 if (getLanguage((String)language_combobox.getItemAt(0))==null) { 345 add_button.setEnabled(true); 346 } else { 347 add_button.setEnabled(false); 348 } 310 349 remove_button = new GLIButton(); 311 350 remove_button.setMnemonic(KeyEvent.VK_R); … … 313 352 Dictionary.registerBoth(remove_button, "CDM.LanguageManager.Remove", "CDM.LanguageManager.Remove_Tooltip"); 314 353 315 clear_button = new GLIButton();316 clear_button.setMnemonic(KeyEvent.VK_C);317 // If there is a default language, then this is enabled318 clear_button.setEnabled(default_language != null && default_language.isAssigned());319 Dictionary.registerBoth(clear_button, "CDM.LanguageManager.Clear_Default", "CDM.LanguageManager.Clear_Default_Tooltip");320 321 set_button = new GLIButton();322 set_button.setMnemonic(KeyEvent.VK_S);323 set_button.setEnabled(false);324 Dictionary.registerBoth(set_button, "CDM.LanguageManager.Set_Default", "CDM.LanguageManager.Set_Default_Tooltip");325 326 354 // Set up and connect listeners. 327 355 add_button.addActionListener(new AddListener()); 328 clear_button.addActionListener(new ClearDefaultListener()); 356 move_down_button.addActionListener(new MoveListener(false)); 357 move_up_button.addActionListener(new MoveListener(true)); 329 358 remove_button.addActionListener(new RemoveListener()); 330 selector_combobox.addActionListener(new SelectorListener());331 set_ button.addActionListener(new SetDefaultListener());332 language_list.addListSelectionListener(new ListListener());359 language_combobox.addActionListener(new SelectorListener()); 360 set_default_button.addActionListener(new SetDefaultListener()); 361 selected_languages_list.addListSelectionListener(new ListListener()); 333 362 334 363 // Layout components 335 default_panel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createEmptyBorder(2,0,2,2))); 336 default_panel.setLayout(new BorderLayout()); 337 default_panel.add(default_label, BorderLayout.WEST); 338 default_panel.add(default_language_field, BorderLayout.CENTER); 364 movement_pane.setBorder(BorderFactory.createEmptyBorder(0,2,0,0)); 365 movement_pane.setLayout(new GridLayout(3,1)); 366 movement_pane.add(move_up_button); 367 movement_pane.add(move_down_button); 368 movement_pane.add(set_default_button); 339 369 340 370 control_panel.setBorder(BorderFactory.createEmptyBorder(5,0,0,0)); 341 371 control_panel.setLayout(new BorderLayout()); 342 372 control_panel.add(selector_label, BorderLayout.WEST); 343 control_panel.add(selector_combobox, BorderLayout.CENTER); 344 345 details_panel.setBorder(BorderFactory.createEmptyBorder(5,0,5,0)); 346 details_panel.setLayout(new BorderLayout()); 347 details_panel.add(default_panel, BorderLayout.CENTER); 348 details_panel.add(control_panel, BorderLayout.SOUTH); 373 control_panel.add(language_combobox, BorderLayout.CENTER); 349 374 350 375 center_panel.setLayout(new BorderLayout()); 351 center_panel.add(language_list_label, BorderLayout.NORTH); 352 center_panel.add(new JScrollPane(language_list), BorderLayout.CENTER); 353 center_panel.add(details_panel, BorderLayout.SOUTH); 354 355 button_panel.setLayout(new GridLayout(2,2)); 376 center_panel.add(selected_languages_list_label, BorderLayout.NORTH); 377 center_panel.add(new JScrollPane(selected_languages_list), BorderLayout.CENTER); 378 center_panel.add(movement_pane, BorderLayout.EAST); 379 center_panel.add(control_panel, BorderLayout.SOUTH); 380 381 button_panel.setLayout(new GridLayout(1,2)); 356 382 button_panel.add(add_button); 357 383 button_panel.add(remove_button); 358 button_panel.add(set_button); 359 button_panel.add(clear_button); 360 384 // button_panel.add(set_button); 385 // button_panel.add(clear_button); 386 387 //when we go to a multi list, remove inner_panel and empty_panel 388 JPanel empty_panel = new JPanel(); 389 JPanel inner_panel = new JPanel(); 390 391 inner_panel.setLayout(new BorderLayout()); 392 inner_panel.add(center_panel, BorderLayout.CENTER); 393 inner_panel.add(button_panel, BorderLayout.SOUTH); 361 394 setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); 362 395 setLayout(new BorderLayout()); 363 add(center_panel, BorderLayout.CENTER); 364 add(button_panel, BorderLayout.SOUTH); 396 //add(center_panel, BorderLayout.CENTER); 397 //add(button_panel, BorderLayout.SOUTH); 398 add(inner_panel, BorderLayout.NORTH); 399 add(empty_panel, BorderLayout.CENTER); 365 400 } 366 401 367 public void clearDefaultLanguage() {368 clear_button.doClick();369 }370 371 402 /** Destructor. */ 372 403 public void destroy() { … … 387 418 */ 388 419 public void actionPerformed(ActionEvent event) { 389 String language_code = (String) selector_combobox.getSelectedItem();420 String language_code = (String) language_combobox.getSelectedItem(); 390 421 if(language_code != null) { 391 422 addLanguage(new Language(language_code)); 392 423 } 424 // add some collectionmeta 425 String lang_name = getLanguageName(language_code); 426 CollectionMeta metadatum = new CollectionMeta("." + language_code); 427 metadatum.setValue(lang_name); 428 CollectionDesignManager.collectionmeta_manager.addMetadatum(metadatum); 429 393 430 add_button.setEnabled(false); 394 }395 }396 397 /** Listens for actions apon the 'clear default' button in the LanguageManager controls, and if detected calls the setDefault method of the manager with <i>null</i>. */398 private class ClearDefaultListener399 implements ActionListener {400 /** Clear the default index.401 * @param event An <strong>ActionEvent</strong>.402 */403 public void actionPerformed(ActionEvent event) {404 setDefault(null);405 clear_button.setEnabled(false);406 default_language_field.setText("");407 431 } 408 432 } … … 416 440 */ 417 441 public void actionPerformed(ActionEvent event) { 418 Language delete_me = (Language) language_list.getSelectedValue();442 Language delete_me = (Language)selected_languages_list.getSelectedValue(); 419 443 if(delete_me != null) { 444 // Remove any current metadata for this language 445 CollectionDesignManager.collectionmeta_manager.removeMetadata("." + delete_me.getCode()); 420 446 removeLanguage(delete_me); 421 447 if(default_language != null && default_language.equals(delete_me)) { 422 448 setDefault(null); 423 clear_button.setEnabled(false);424 default_language_field.setText("");449 //clear_button.setEnabled(false); 450 //default_language_field.setText(""); 425 451 } 426 452 } … … 436 462 */ 437 463 public void actionPerformed(ActionEvent event) { 438 if(selector_combobox.getSelectedItem() != null) { 464 String language_code = (String) language_combobox.getSelectedItem(); 465 if(language_code != null && getLanguage(language_code) == null) { 439 466 add_button.setEnabled(true); 440 467 } … … 453 480 */ 454 481 public void actionPerformed(ActionEvent event) { 455 if(!language_list.isSelectionEmpty()) { 456 setDefault((Language)language_list.getSelectedValue()); 457 clear_button.setEnabled(true); 458 default_language_field.setText(default_language.toString()); 459 } 460 } 461 } 482 Language selected_language = (Language) selected_languages_list.getSelectedValue(); 483 if(selected_language != null) { 484 setDefault(selected_language); 485 //clear_button.setEnabled(true); 486 // This should cause a repaint of just the desired row 487 selected_languages_list.setSelectedValue(selected_language, true); 488 } 489 set_default_button.setEnabled(false); 490 } 491 } 492 493 private class MoveListener 494 implements ActionListener 495 { 496 private boolean move_up; 497 498 public MoveListener(boolean move_up) 499 { 500 this.move_up = move_up; 501 } 502 503 public void actionPerformed(ActionEvent event) 504 { 505 // Retrieve the selected language 506 Language language = (Language) selected_languages_list.getSelectedValue(); 507 if (language != null) { 508 int new_position = moveLanguage(language, move_up); 509 // Ensure the language that moved is still selected 510 selected_languages_list.setSelectedIndex(new_position); 511 } 512 } 513 } 514 462 515 463 516 /** Listens for selections within the list on the LanguageManager controls, and if a change is detected enables, or disables, controls appropriately. */ … … 468 521 */ 469 522 public void valueChanged(ListSelectionEvent event) { 470 if(language_list.isSelectionEmpty()) { 523 if (event.getValueIsAdjusting()) { 524 return; 525 } 526 if(selected_languages_list.isSelectionEmpty()) { 471 527 remove_button.setEnabled(false); 472 set_button.setEnabled(false); 473 } 474 else { 475 remove_button.setEnabled(true); 476 set_button.setEnabled(true); 477 } 528 set_default_button.setEnabled(false); 529 move_down_button.setEnabled(false); 530 move_up_button.setEnabled(false); 531 return; 532 } 533 534 int i = selected_languages_list.getSelectedIndex(); 535 int size = selected_languages_list.getModel().getSize(); 536 Language selected_lang = (Language)selected_languages_list.getSelectedValue(); 537 remove_button.setEnabled(true); 538 set_default_button.setEnabled(default_language == null || !default_language.equals(selected_lang)); 539 540 if (i > 0) { 541 move_up_button.setEnabled(true); 542 } 543 else { 544 move_up_button.setEnabled(false); 545 } 546 if (i < size-1){ 547 move_down_button.setEnabled(true); 548 } 549 else { 550 move_down_button.setEnabled(false); 551 } 552 } 553 } 554 555 private class MyLanguageListCellRenderer 556 extends DefaultListCellRenderer 557 { 558 /** Return a component that has been configured to display the specified value. */ 559 public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 560 JLabel component = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); 561 if (default_language != null && default_language.equals(value)) { 562 component.setText(component.getText() + " " + Dictionary.get("CDM.LanguageManager.Default_Language")); 563 } 564 return component; 478 565 } 479 566 }
Note:
See TracChangeset
for help on using the changeset viewer.