Changeset 9563


Ignore:
Timestamp:
2005-04-06T10:14:53+12:00 (19 years ago)
Author:
kjdon
Message:

changed the interface a bit to make it more like the other two tabs. still needs to allow selection of multiple indexes, but will wait till after the next cdrom so we don'tneed to change the help text

File:
1 edited

Legend:

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

    r8243 r9563  
    138138    known_languages.clear();
    139139    known_languages = null;
     140    default_language = null;
    140141    }
    141142
     
    192193    }
    193194
     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
    194230    /** Method to remove a certain language.
    195231     * @param language The <strong>Language</strong> to remove.
     
    201237    if(default_language != null && default_language.equals(language)) {
    202238        default_language = null;
    203         ((LanguageControl)controls).clearDefaultLanguage();
    204239    }
    205240    Gatherer.c_man.configurationChanged();
     
    243278    /** The button to add a new language support. */
    244279    private JButton add_button = null;
    245     /** The button to clear the current default language. */
    246     private JButton clear_button = null;
    247280    /** The button to remove a supported language. */
    248281    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;
    249286    /** The button to set the current language as the default one. */
    250     private JButton set_button = null;
     287    private JButton set_default_button = null;
    251288    /** A combobox listing the available supported languages. */
    252     private JComboBox selector_combobox = null;
     289    private JComboBox language_combobox = null;
    253290    /** 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;
    259292    /** Constructor.
    260293     * @see org.greenstone.gatherer.cdm.LanguageManager.LanguageControl.AddListener
     
    270303        JPanel center_panel = new JPanel();
    271304
    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);
    276311        JPanel details_panel = new JPanel();
    277312
    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);
    293313        JPanel control_panel = new JPanel();
    294 
    295314        JLabel selector_label = new JLabel();
    296315        Dictionary.registerText(selector_label, "CDM.LanguageManager.Selector");
    297316
    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");
    303338
    304339        JPanel button_panel = new JPanel();
     
    307342        add_button.setMnemonic(KeyEvent.VK_A);
    308343        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        }
    310349        remove_button = new GLIButton();
    311350        remove_button.setMnemonic(KeyEvent.VK_R);
     
    313352        Dictionary.registerBoth(remove_button, "CDM.LanguageManager.Remove", "CDM.LanguageManager.Remove_Tooltip");
    314353
    315         clear_button = new GLIButton();
    316         clear_button.setMnemonic(KeyEvent.VK_C);
    317         // If there is a default language, then this is enabled
    318         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 
    326354        // Set up and connect listeners.
    327355        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));
    329358        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());
    333362
    334363        // 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);
    339369
    340370        control_panel.setBorder(BorderFactory.createEmptyBorder(5,0,0,0));
    341371        control_panel.setLayout(new BorderLayout());
    342372        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);
    349374
    350375        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));
    356382        button_panel.add(add_button);
    357383        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);
    361394        setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
    362395        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);
    365400    }
    366401   
    367     public void clearDefaultLanguage() {
    368         clear_button.doClick();
    369     }
    370 
    371402    /** Destructor. */
    372403    public void destroy() {
     
    387418         */
    388419        public void actionPerformed(ActionEvent event) {
    389         String language_code = (String) selector_combobox.getSelectedItem();
     420        String language_code = (String) language_combobox.getSelectedItem();
    390421        if(language_code != null) {
    391422            addLanguage(new Language(language_code));
    392423        }
     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
    393430        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 ClearDefaultListener
    399         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("");
    407431        }
    408432    }
     
    416440         */
    417441        public void actionPerformed(ActionEvent event) {
    418         Language delete_me = (Language)language_list.getSelectedValue();
     442        Language delete_me = (Language)selected_languages_list.getSelectedValue();
    419443        if(delete_me != null) {
     444            // Remove any current metadata for this language
     445            CollectionDesignManager.collectionmeta_manager.removeMetadata("." + delete_me.getCode());
    420446            removeLanguage(delete_me);
    421447            if(default_language != null && default_language.equals(delete_me)) {
    422448            setDefault(null);
    423             clear_button.setEnabled(false);
    424             default_language_field.setText("");
     449            //clear_button.setEnabled(false);
     450            //default_language_field.setText("");
    425451            }
    426452        }
     
    436462         */
    437463        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) {
    439466            add_button.setEnabled(true);
    440467        }
     
    453480         */
    454481        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
    462515
    463516    /** Listens for selections within the list on the LanguageManager controls, and if a change is detected enables, or disables, controls appropriately. */
     
    468521         */
    469522        public void valueChanged(ListSelectionEvent event) {
    470         if(language_list.isSelectionEmpty()) {
     523        if (event.getValueIsAdjusting()) {
     524            return;
     525        }
     526        if(selected_languages_list.isSelectionEmpty()) {
    471527            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;
    478565        }
    479566    }
Note: See TracChangeset for help on using the changeset viewer.