Ignore:
Timestamp:
2003-08-18T14:10:31+12:00 (21 years ago)
Author:
jmt12
Message:

I can't remember what has changed, but I bet it was for the better

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gli/src/org/greenstone/gatherer/gui/Preferences.java

    r5042 r5164  
    33import java.awt.*;
    44import java.awt.event.*;
     5import java.io.*;
    56import java.net.*;
    67import java.util.*;
    78import javax.swing.*;
     9import javax.swing.event.*;
     10import org.greenstone.gatherer.Configuration;
    811import org.greenstone.gatherer.Gatherer;
    912import org.greenstone.gatherer.checklist.CheckList;
     
    1316import org.greenstone.gatherer.gui.NumberField;
    1417import org.greenstone.gatherer.gui.SimpleMenuBar;
     18import org.greenstone.gatherer.util.StaticStrings;
    1519import org.greenstone.gatherer.util.Utility;
    1620import org.greenstone.gatherer.util.XORToggleButtonGroup;
     
    3337    private JCheckBox workflow_export;
    3438    private JCheckBox workflow_preview;
     39    private JComboBox language_combobox;
     40    private JLabel extracted_metadata_label;
     41    private JLabel file_size_label;
     42    private JLabel language_label;
     43    private JLabel library_path_label;
     44    private JLabel predefined_label;
     45    private JLabel proxy_host_label;
     46    private JLabel proxy_port_label;
     47    private JLabel title_label;
     48    private JRadioButton hide_extracted_metadata_radio_button;
     49    private JRadioButton hide_file_size_radio_button;
     50    private JRadioButton show_file_size_radio_button;
     51    private JRadioButton view_extracted_metadata_radio_button;
    3552    private JTabbedPane tab_pane;
    3653    private JTextField library_path_field;
     
    3956    private Preferences self;
    4057
    41     static final Dimension LABEL_SIZE = new Dimension(100, 25);
    42     static final Dimension ROW_SIZE = new Dimension(380, 25);
    43     static final Dimension SIZE = new Dimension(400, 345);
     58    static final Dimension LABEL_SIZE = new Dimension(150, 25);
     59    static final Dimension ROW_SIZE = new Dimension(450, 25);
     60    static final Dimension SIZE = new Dimension(450, 345);
    4461    static final String TRUE = "true";
    4562
     
    5471    JPanel content_pane = (JPanel) getContentPane();
    5572    tab_pane = new JTabbedPane();
     73    tab_pane.add("Preferences.General", createGeneralPreferences());
    5674    tab_pane.add("Preferences.Workflow", createWorkflowPreferences());
    5775    tab_pane.add("Preferences.Connection", createConnectionPreferences());
     
    101119    JPanel library_path_pane = new JPanel();
    102120    library_path_pane.setPreferredSize(ROW_SIZE);
    103     JLabel library_path_label = new JLabel("Preferences.Connection.Library_Path");
     121    library_path_label = new JLabel("Preferences.Connection.Library_Path");
    104122    library_path_label.setPreferredSize(LABEL_SIZE);
    105123    library_path_field = new JTextField(Gatherer.config.getString("general.exec_address", true));
     
    113131    JPanel proxy_host_pane = new JPanel();
    114132    proxy_host_pane.setPreferredSize(ROW_SIZE);
    115     JLabel proxy_host_label = new JLabel("Preferences.Connection.Proxy_Host");
     133    proxy_host_label = new JLabel("Preferences.Connection.Proxy_Host");
    116134    proxy_host_label.setPreferredSize(LABEL_SIZE);
    117135    proxy_host_field = new JTextField(Gatherer.config.getString("general.proxy_host", true));
     
    119137    JPanel proxy_port_pane = new JPanel();
    120138    proxy_port_pane.setPreferredSize(ROW_SIZE);
    121     JLabel proxy_port_label = new JLabel("Preferences.Connection.Proxy_Port");
     139    proxy_port_label = new JLabel("Preferences.Connection.Proxy_Port");
    122140    proxy_port_label.setPreferredSize(LABEL_SIZE);
    123141    proxy_port_field = new NumberField(Gatherer.config.getString("general.proxy_port", true));
     
    152170    }
    153171
     172    private JPanel createGeneralPreferences() {
     173    JPanel general_pane = new JPanel();
     174
     175    // Build the model of available languages
     176    ArrayList dictionary_model = new ArrayList();
     177
     178    Locale french = new Locale("fr","FR");
     179    System.err.println("French locale: " + french);
     180
     181
     182    dictionary_model.add(new DictionaryEntry(Locale.ENGLISH));
     183    File classes_folder = new File(Utility.BASE_DIR + StaticStrings.CLASSES_FOLDER);
     184    File[] possible_dictionaries = classes_folder.listFiles();
     185    for(int i = 0; i < possible_dictionaries.length; i++) {
     186        String filename = possible_dictionaries[i].getName();
     187        if(filename.endsWith(StaticStrings.PROPERTIES_FILE_EXTENSION) && filename.indexOf(StaticStrings.UNDERSCORE_CHARACTER) != -1) {
     188        StringTokenizer tokenizer = new StringTokenizer(filename.substring(filename.indexOf(StaticStrings.UNDERSCORE_CHARACTER) + 1, filename.indexOf(StaticStrings.STOP_CHARACTER)), StaticStrings.UNDERSCORE_CHARACTER);
     189        Locale locale = null;
     190        switch(tokenizer.countTokens()) {
     191        case 1:
     192            locale = new Locale(tokenizer.nextToken().toLowerCase());
     193            break;
     194        case 2:
     195            locale = new Locale(tokenizer.nextToken().toLowerCase(), tokenizer.nextToken().toUpperCase());
     196            break;
     197        }
     198        tokenizer = null;
     199        // Open the file and read the first line
     200        String description = null;
     201        try {
     202            BufferedReader br = new BufferedReader(new FileReader(possible_dictionaries[i]));
     203            String first_line = br.readLine();
     204            br.close();
     205            description = first_line.substring(first_line.indexOf(StaticStrings.COLON_CHARACTER) + 1);
     206        }
     207        catch(Exception error) {
     208        }
     209        DictionaryEntry entry = new DictionaryEntry(description, locale);
     210        description = null;
     211        locale = null;
     212        if(!dictionary_model.contains(entry)) {
     213            dictionary_model.add(entry);
     214        }
     215        entry = null;
     216        }
     217        filename = null;
     218    }
     219    possible_dictionaries = null;
     220    classes_folder = null;
     221
     222    // Extracted metadata
     223    JPanel extracted_metadata_pane = new JPanel();
     224    extracted_metadata_label = new JLabel("NewCollectionPrompt.Extracted_Metadata");
     225    ButtonGroup extracted_metadata_button_group = new ButtonGroup();
     226    view_extracted_metadata_radio_button = new JRadioButton("NewCollectionPrompt.View_Extracted_Metadata");
     227    view_extracted_metadata_radio_button.setEnabled(Gatherer.c_man.ready());
     228    view_extracted_metadata_radio_button.setOpaque(false);
     229    extracted_metadata_button_group.add(view_extracted_metadata_radio_button);
     230    hide_extracted_metadata_radio_button = new JRadioButton("NewCollectionPrompt.Hide_Extracted_Metadata");
     231    hide_extracted_metadata_radio_button.setEnabled(Gatherer.c_man.ready());
     232    hide_extracted_metadata_radio_button.setOpaque(false);
     233    extracted_metadata_button_group.add(hide_extracted_metadata_radio_button);
     234    if(Gatherer.config.get("general.view_extracted_metadata", Configuration.COLLECTION_SPECIFIC)) {
     235        view_extracted_metadata_radio_button.setSelected(true);
     236    }
     237    else {
     238        hide_extracted_metadata_radio_button.setSelected(true);
     239    }
     240
     241    // Show file sizes
     242    JPanel file_size_pane = new JPanel();
     243    file_size_label = new JLabel("Prefereces.General.File_Size");
     244    ButtonGroup file_size_button_group = new ButtonGroup();
     245    show_file_size_radio_button = new JRadioButton("Prefereces.General.Show_File_Size");
     246    show_file_size_radio_button.setEnabled(Gatherer.c_man.ready());
     247    show_file_size_radio_button.setOpaque(false);
     248        file_size_button_group.add(show_file_size_radio_button);
     249    hide_file_size_radio_button = new JRadioButton("Prefereces.General.Hide_File_Size");
     250    hide_file_size_radio_button.setEnabled(Gatherer.c_man.ready());
     251    hide_file_size_radio_button.setOpaque(false);
     252    file_size_button_group.add(hide_file_size_radio_button);
     253    if(Gatherer.config.get("general.show_file_size", Configuration.COLLECTION_SPECIFIC)) {
     254        show_file_size_radio_button.setSelected(true);
     255    }
     256    else {
     257        hide_file_size_radio_button.setSelected(true);
     258    }
     259
     260    // Language
     261    JPanel language_pane = new JPanel();
     262    language_label = new JLabel("Preferences.General.Interface_Language");
     263    language_label.setPreferredSize(LABEL_SIZE);
     264    language_combobox = new JComboBox(dictionary_model.toArray());
     265
     266    // Connect
     267    Gatherer.dictionary.register(file_size_label, null, false);
     268    Gatherer.dictionary.register(show_file_size_radio_button, null, false);
     269    Gatherer.dictionary.register(hide_file_size_radio_button, null, false);
     270    Gatherer.dictionary.register(view_extracted_metadata_radio_button, null, false);
     271    Gatherer.dictionary.register(hide_extracted_metadata_radio_button, null, false);
     272    Gatherer.dictionary.register(language_label, null, false);
     273    language_combobox.addActionListener(new LanguageComboboxListener());
     274    // Layout
     275
     276    file_size_pane.setLayout(new GridLayout(1,3,5,0));
     277        file_size_pane.add(show_file_size_radio_button);
     278    file_size_pane.add(hide_file_size_radio_button);
     279
     280    extracted_metadata_pane.setLayout(new GridLayout(1,3,5,0));
     281    extracted_metadata_pane.add(view_extracted_metadata_radio_button);
     282    extracted_metadata_pane.add(hide_extracted_metadata_radio_button);
     283
     284    language_pane.setLayout(new BorderLayout());
     285    language_pane.add(language_label, BorderLayout.WEST);
     286    language_pane.add(language_combobox, BorderLayout.CENTER);
     287
     288    general_pane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
     289    general_pane.setLayout(new GridLayout(5,1,0,5));
     290    general_pane.add(extracted_metadata_pane);
     291    general_pane.add(file_size_pane);
     292    general_pane.add(language_pane);
     293
     294    return general_pane;
     295    }
     296
    154297    /** The warning preferences are controlled through a checklist. */
    155298    private JPanel createWarningPreferences() {
    156299    // Retrieve all of the warning preferences settings.
    157300    HashMap warning_preferences = Gatherer.config.getAll("warning\\..*", true);
    158     warning_preferences_check_list = new CheckList();
     301    warning_preferences_check_list = new CheckList(false);
    159302    for(Iterator keys = warning_preferences.keySet().iterator(); keys.hasNext(); ) {
    160303        String property = (String) keys.next();
     
    189332    JPanel workflow_preferences_pane = new JPanel();
    190333    JPanel checklist_pane = new JPanel();
    191     JLabel title_label = new JLabel("Preferences.Workflow.Title");
     334    title_label = new JLabel("Preferences.Workflow.Title");
    192335    title_label.setPreferredSize(ROW_SIZE);
    193336    XORToggleButtonGroup checkbox_group = new XORToggleButtonGroup();
     
    209352    workflow_preview.setPreferredSize(ROW_SIZE);
    210353    JPanel predefined_pane = new JPanel();
    211     JLabel predefined_label = new JLabel("Preferences.Workflow.Predefined.Label");
     354    predefined_label = new JLabel("Preferences.Workflow.Predefined.Label");
    212355    predefined_label.setPreferredSize(new Dimension(150,25));
    213356    JComboBox predefined_combobox = new JComboBox(predefined);
     
    272415    public void dispose() {
    273416    // Deregister dictionary components
     417
     418    // Connection
     419    Gatherer.dictionary.deregister(library_path_label);
     420    Gatherer.dictionary.deregister(use_proxy_checkbox);
     421    Gatherer.dictionary.deregister(proxy_host_label);
     422    Gatherer.dictionary.deregister(proxy_port_label);
     423
     424    // General
     425    Gatherer.dictionary.deregister(file_size_label);
     426    Gatherer.dictionary.deregister(show_file_size_radio_button);
     427    Gatherer.dictionary.deregister(hide_file_size_radio_button);
     428    Gatherer.dictionary.deregister(extracted_metadata_label);
     429    Gatherer.dictionary.deregister(view_extracted_metadata_radio_button);
     430    Gatherer.dictionary.deregister(hide_extracted_metadata_radio_button);
     431    Gatherer.dictionary.deregister(language_label);
     432
     433    // Workflow
     434    Gatherer.dictionary.deregister(title_label);
     435    Gatherer.dictionary.deregister(workflow_browse);
     436    Gatherer.dictionary.deregister(workflow_mirror);
     437    Gatherer.dictionary.deregister(workflow_gather);
     438    Gatherer.dictionary.deregister(workflow_enrich);
     439    Gatherer.dictionary.deregister(workflow_design);
     440    Gatherer.dictionary.deregister(workflow_export);
     441    Gatherer.dictionary.deregister(workflow_create);
     442    Gatherer.dictionary.deregister(workflow_preview);
     443    Gatherer.dictionary.deregister(predefined_label);
     444
     445    // Dialog
    274446    Gatherer.dictionary.deregister(this);
    275447    Gatherer.dictionary.deregister(tab_pane);
     
    288460    }
    289461    public void actionPerformed(ActionEvent event) {
    290                 // Submit the various changes.
    291                 // Connection preferences
     462        // Submit the various changes.
     463        // Connection preferences
    292464        String library_path_string = library_path_field.getText();
    293465        Gatherer.config.setString("general.exec_address", true, library_path_string);
     
    300472        }
    301473        }
    302 
    303474        Gatherer.config.set("general.use_proxy", true, use_proxy_checkbox.isSelected());
    304475        Gatherer.config.setString("general.proxy_host", true, proxy_host_field.getText());
    305476        Gatherer.config.setString("general.proxy_port", true, proxy_port_field.getText());
    306477        Gatherer.setProxy();
    307                 // Warning preferences
     478
     479        // General preferences
     480        Gatherer.config.set("general.show_file_size", Configuration.COLLECTION_SPECIFIC, show_file_size_radio_button.isSelected());
     481        if(Gatherer.g_man.mirror_pane != null) {
     482        Gatherer.g_man.mirror_pane.refreshTrees();
     483        }
     484        Gatherer.g_man.collection_pane.refreshTrees();
     485        Gatherer.g_man.metaedit_pane.refreshTrees();
     486
     487        Gatherer.config.set("general.view_extracted_metadata", Configuration.COLLECTION_SPECIFIC, view_extracted_metadata_radio_button.isSelected());
     488        Gatherer.g_man.metaedit_pane.valueChanged((TreeSelectionEvent) null); // Refresh metadata table
     489
     490        Gatherer.config.setLocale("general.locale", Configuration.GENERAL_SETTING, ((DictionaryEntry)language_combobox.getSelectedItem()).getLocale());
     491
     492        // Warning preferences
    308493        for(int i = 0; i < warning_preferences_check_list.getEntryCount(); i++) {
    309494        Entry entry = warning_preferences_check_list.get(i);
    310495        Gatherer.config.set(entry.getProperty(), true, entry.isSelected());
    311496        }
    312                 // Workflow preferences
     497        // Workflow preferences
    313498        Gatherer.config.set("workflow.browse", false, workflow_browse.isSelected());
    314499        Gatherer.config.set("workflow.mirror", false, workflow_mirror.isSelected());
     
    327512        Gatherer.g_man.workflowUpdate("Create", workflow_create.isSelected());
    328513        Gatherer.g_man.workflowUpdate("Preview", workflow_preview.isSelected());
    329                 // Hide dialog
     514        // Hide dialog
    330515        if(close) {
    331516        self.dispose();
     
    338523    public void actionPerformed(ActionEvent event) {
    339524        self.dispose();
     525    }
     526    }
     527
     528    private class DictionaryEntry
     529    implements Comparable {
     530    private Locale locale;
     531    private String description;
     532    public DictionaryEntry(Locale locale) {
     533        this.description = null;
     534        this.locale = locale;
     535    }
     536    public DictionaryEntry(String description, Locale locale) {
     537        this.description = description;
     538        this.locale = locale;
     539    }
     540    public int compareTo(Object object) {
     541        return toString().compareTo(object.toString());
     542    }
     543    public boolean equals(Object object) {
     544        return toString().equals(object.toString());
     545    }
     546    public Locale getLocale() {
     547        return locale;
     548    }
     549    public String toString() {
     550        if(description != null) {
     551        return description;
     552        }
     553        else {
     554        return locale.getDisplayName();
     555        }
    340556    }
    341557    }
     
    369585    }
    370586
     587    private class LanguageComboboxListener
     588    implements ActionListener {
     589    public void actionPerformed(ActionEvent event) {
     590        // Retrieve the entry
     591        DictionaryEntry entry = (DictionaryEntry) language_combobox.getSelectedItem();
     592        if(entry != null) {
     593        Gatherer.dictionary.changeDictionary(entry.getLocale());
     594        // Display message
     595        JOptionPane.showMessageDialog(Gatherer.g_man, Gatherer.dictionary.get("Preferences.General.Restart_Required"), Gatherer.dictionary.get("Preferences.General.Restart_Required"), JOptionPane.WARNING_MESSAGE);
     596        }
     597    }
     598    }
     599
    371600    private class UseProxyListener
    372601    implements ActionListener {
Note: See TracChangeset for help on using the changeset viewer.