package org.jabref.gui; import java.awt.Component; import java.util.Collections; import java.util.List; import java.util.Locale; import java.util.Objects; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JPanel; import org.jabref.logic.l10n.Localization; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.InternalBibtexFields; import org.jabref.model.metadata.SaveOrderConfig; import com.jgoodies.forms.builder.FormBuilder; import com.jgoodies.forms.layout.FormLayout; public class SaveOrderConfigDisplay { private JPanel panel; private JComboBox<String> savePriSort; private JComboBox<String> saveSecSort; private JComboBox<String> saveTerSort; private JCheckBox savePriDesc; private JCheckBox saveSecDesc; private JCheckBox saveTerDesc; public SaveOrderConfigDisplay() { init(); } private void init() { List<String> fieldNames = InternalBibtexFields.getAllPublicFieldNames(); fieldNames.add(BibEntry.KEY_FIELD); Collections.sort(fieldNames); String[] allPlusKey = fieldNames.toArray(new String[fieldNames.size()]); savePriSort = new JComboBox<>(allPlusKey); savePriSort.setEditable(true); saveSecSort = new JComboBox<>(allPlusKey); saveSecSort.setEditable(true); saveTerSort = new JComboBox<>(allPlusKey); saveTerSort.setEditable(true); savePriDesc = new JCheckBox(Localization.lang("Descending")); saveSecDesc = new JCheckBox(Localization.lang("Descending")); saveTerDesc = new JCheckBox(Localization.lang("Descending")); FormLayout layout = new FormLayout("right:pref, 8dlu, fill:pref, 4dlu, fill:60dlu, 4dlu, left:pref", "pref, 2dlu, pref, 2dlu, pref"); FormBuilder builder = FormBuilder.create().layout(layout); builder.add(Localization.lang("Primary sort criterion")).xy(1, 1); builder.add(savePriSort).xy(3, 1); builder.add(savePriDesc).xy(5, 1); builder.add(Localization.lang("Secondary sort criterion")).xy(1, 3); builder.add(saveSecSort).xy(3, 3); builder.add(saveSecDesc).xy(5, 3); builder.add(Localization.lang("Tertiary sort criterion")).xy(1, 5); builder.add(saveTerSort).xy(3, 5); builder.add(saveTerDesc).xy(5, 5); panel = builder.build(); } public Component getPanel() { return panel; } public void setEnabled(boolean enabled) { savePriSort.setEnabled(enabled); savePriDesc.setEnabled(enabled); saveSecSort.setEnabled(enabled); saveSecDesc.setEnabled(enabled); saveTerSort.setEnabled(enabled); saveTerDesc.setEnabled(enabled); } public void setSaveOrderConfig(SaveOrderConfig saveOrderConfig) { Objects.requireNonNull(saveOrderConfig); savePriSort.setSelectedItem(saveOrderConfig.sortCriteria[0].field); savePriDesc.setSelected(saveOrderConfig.sortCriteria[0].descending); saveSecSort.setSelectedItem(saveOrderConfig.sortCriteria[1].field); saveSecDesc.setSelected(saveOrderConfig.sortCriteria[1].descending); saveTerSort.setSelectedItem(saveOrderConfig.sortCriteria[2].field); saveTerDesc.setSelected(saveOrderConfig.sortCriteria[2].descending); } public SaveOrderConfig getSaveOrderConfig() { SaveOrderConfig saveOrderConfig = new SaveOrderConfig(); saveOrderConfig.sortCriteria[0].field = getSelectedItemAsLowerCaseTrim(savePriSort); saveOrderConfig.sortCriteria[0].descending = savePriDesc.isSelected(); saveOrderConfig.sortCriteria[1].field = getSelectedItemAsLowerCaseTrim(saveSecSort); saveOrderConfig.sortCriteria[1].descending = saveSecDesc.isSelected(); saveOrderConfig.sortCriteria[2].field = getSelectedItemAsLowerCaseTrim(saveTerSort); saveOrderConfig.sortCriteria[2].descending = saveTerDesc.isSelected(); return saveOrderConfig; } private String getSelectedItemAsLowerCaseTrim(JComboBox<String> sortBox) { return sortBox.getSelectedItem().toString().toLowerCase(Locale.ROOT).trim(); } }