in languagetool-gui-commons/src/main/java/org/languagetool/gui/ConfigurationDialog.java [1270:1487]
private JPanel getProfilePanel(List<Rule> rules) {
profileChanged = true;
JPanel profilePanel = new JPanel();
profilePanel.setLayout(new GridBagLayout());
GridBagConstraints cons = new GridBagConstraints();
cons.insets = new Insets(4, 4, 0, 8);
cons.gridx = 0;
cons.gridy = 0;
cons.weightx = 1.0f;
cons.anchor = GridBagConstraints.WEST;
List<String> profiles = new ArrayList<>();
String defaultOptions = messages.getString("guiDefaultOptions");
String userOptions = messages.getString("guiUserProfile");
profiles.addAll(config.getDefinedProfiles());
profiles.sort(null);
profiles.add(0, userOptions);
String currentProfile = config.getCurrentProfile();
JComboBox<String> profileBox = new JComboBox<>(profiles.toArray(new String[0]));
if(currentProfile == null || currentProfile.isEmpty()) {
profileBox.setSelectedItem(userOptions);
} else {
profileBox.setSelectedItem(currentProfile);
}
profileBox.addItemListener(e -> {
if (e.getStateChange() == ItemEvent.SELECTED) {
if(profileChanged) {
try {
// The configuration has to be saved first to save previous changes
config.saveConfiguration(null);
List<String> saveProfiles = new ArrayList<>();
saveProfiles.addAll(config.getDefinedProfiles());
if(e.getItem().equals(userOptions)) {
config.initOptions();
config.loadConfiguration("");
config.setCurrentProfile(null);
} else {
config.initOptions();
config.loadConfiguration((String) e.getItem());
config.setCurrentProfile((String) e.getItem());
}
config.addProfiles(saveProfiles);
restartShow = true;
dialog.setVisible(false);
} catch (IOException e1) {
}
} else {
profileChanged = true;
}
}
});
profilePanel.add(new JLabel(addColonToMessageString("guiCurrentProfile")), cons);
cons.insets = new Insets(6, 16, 0, 8);
cons.gridy++;
profilePanel.add(profileBox, cons);
JButton renameButton = new JButton(messages.getString("guiRenameProfile") + "...");
renameButton.setEnabled(!profileBox.getSelectedItem().equals(defaultOptions)
&& !profileBox.getSelectedItem().equals(userOptions));
renameButton.addActionListener(e -> {
boolean noName = true;
String profileName = (String) profileBox.getSelectedItem();
while (noName) {
profileName = JOptionPane.showInputDialog(dialog, messages.getString("guiRenameProfile") + ":", profileName);
if (profileName == null || profileName.equals("")) {
break;
}
profileName = profileName.replaceAll("[ \t=]", "_");
noName = false;
while(config.getDefinedProfiles().contains(profileName) || userOptions.equals(profileName)) {
profileName += "_new";
noName = true;
}
}
if (profileName != null && !profileName.equals("")) {
config.removeProfile(config.getCurrentProfile());
config.addProfile(profileName);
config.setCurrentProfile(profileName);
restartShow = true;
dialog.setVisible(false);
}
});
cons.gridy++;
profilePanel.add(renameButton, cons);
JButton exportButton = new JButton(messages.getString("guiExportProfile") + "...");
exportButton.setEnabled(!profileBox.getSelectedItem().equals(defaultOptions)
&& !profileBox.getSelectedItem().equals(userOptions));
exportButton.addActionListener(e -> {
JFileChooser fileChooser = new JFileChooser();
int choose = fileChooser.showSaveDialog(dialog);
if (choose == JFileChooser.APPROVE_OPTION) {
try {
config.exportProfile((String) profileBox.getSelectedItem(), fileChooser.getSelectedFile());
} catch (IOException e1) {
}
}
});
cons.gridx++;
profilePanel.add(exportButton, cons);
JButton defaultButton = new JButton(defaultOptions);
defaultButton.addActionListener(e -> {
List<String> saveProfiles = new ArrayList<>();
saveProfiles.addAll(config.getDefinedProfiles());
String saveCurrent = config.getCurrentProfile() == null ? null : config.getCurrentProfile();
config.initOptions();
config.addProfiles(saveProfiles);
config.setCurrentProfile(saveCurrent);
restartShow = true;
dialog.setVisible(false);
});
cons.gridx = 0;
cons.gridy++;
profilePanel.add(defaultButton, cons);
JButton deleteButton = new JButton(messages.getString("guiDeleteProfile"));
deleteButton.setEnabled(!profileBox.getSelectedItem().equals(defaultOptions)
&& !profileBox.getSelectedItem().equals(userOptions));
deleteButton.addActionListener(e -> {
List<String> saveProfiles = new ArrayList<>();
saveProfiles.addAll(config.getDefinedProfiles());
config.initOptions();
try {
config.loadConfiguration("");
} catch (IOException e1) {
}
config.setCurrentProfile(null);
config.addProfiles(saveProfiles);
config.removeProfile((String)profileBox.getSelectedItem());
restartShow = true;
dialog.setVisible(false);
});
cons.gridx++;
profilePanel.add(deleteButton, cons);
cons.insets = new Insets(16, 4, 0, 8);
cons.gridx = 0;
cons.gridy++;
profilePanel.add(new JLabel(addColonToMessageString("guiAddNewProfile")), cons);
cons.insets = new Insets(6, 16, 0, 8);
JButton addButton = new JButton(messages.getString("guiAddProfile") + "...");
addButton.addActionListener(e -> {
boolean noName = true;
String profileName = "";
while (noName) {
profileName = JOptionPane.showInputDialog(dialog, messages.getString("guiAddNewProfile"), profileName);
if (profileName == null || profileName.equals("")) {
break;
}
profileName = profileName.replaceAll("[ \t=]", "_");
noName = false;
while(config.getDefinedProfiles().contains(profileName) || userOptions.equals(profileName)) {
profileName += "_new";
noName = true;
}
}
if (profileName != null && !profileName.equals("")) {
// The configuration has to be saved and reloaded first to save previous changes
try {
config.saveConfiguration(null);
config.initOptions();
config.loadConfiguration(config.getCurrentProfile());
} catch (IOException e1) {
}
config.addProfile(profileName);
config.setCurrentProfile(profileName);
profileChanged = false;
profileBox.addItem(profileName);
profileBox.setSelectedItem(profileName);
deleteButton.setEnabled(true);
renameButton.setEnabled(true);
exportButton.setEnabled(true);
}
});
cons.gridx = 0;
cons.gridy++;
profilePanel.add(addButton, cons);
JButton importButton = new JButton(messages.getString("guiImportProfile") + "...");
importButton.addActionListener(e -> {
JFileChooser fileChooser = new JFileChooser();
int choose = fileChooser.showOpenDialog(dialog);
if (choose == JFileChooser.APPROVE_OPTION) {
try {
// The configuration has to be saved and reloaded first to save previous changes
config.saveConfiguration(null);
config.initOptions();
config.loadConfiguration(config.getCurrentProfile());
List<String> saveProfiles = new ArrayList<>();
saveProfiles.addAll(config.getDefinedProfiles());
Configuration saveConfig = config.copy(config);
config.initOptions();
config.importProfile(fileChooser.getSelectedFile());
String profileName = config.getCurrentProfile();
if (profileName != null) {
config.addProfiles(saveProfiles);
profileName = profileName.replaceAll("[ \t=]", "_");
while(config.getDefinedProfiles().contains(profileName) || userOptions.equals(profileName)) {
profileName += "_new";
}
config.setCurrentProfile(profileName);
config.addProfile(profileName);
config.saveConfiguration(null);
} else {
config.restoreState(saveConfig);;
}
restartShow = true;
dialog.setVisible(false);
} catch (IOException e1) {
}
}
});
cons.gridx++;
profilePanel.add(importButton, cons);
return profilePanel;
}