/*
* (C) Copyright 2014 Boni Garcia (http://bonigarcia.github.io/)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package io.github.bonigarcia.dualsub.gui;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Collections;
import java.util.Vector;
import java.util.prefs.Preferences;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.border.TitledBorder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.github.bonigarcia.dualsub.util.I18N;
/**
* PanelTranslation.
*
* @author Boni Garcia (boni.gg@gmail.com)
* @since 1.0.0
*/
public class PanelTranslation extends JPanel {
private static final Logger log = LoggerFactory
.getLogger(PanelTranslation.class);
private static final long serialVersionUID = 1L;
// Parent
private DualSub parent;
// UI Elements
private JCheckBox enableTranslation;
private JComboBox<LangItem> fromComboBox;
private JComboBox<LangItem> toComboBox;
private JRadioButton rdbtnMerged;
private JRadioButton rdbtnTranslated;
public PanelTranslation(DualSub parent) {
this.parent = parent;
initialize();
}
private void initialize() {
this.setLayout(null);
this.setBorder(
new TitledBorder(UIManager.getBorder("TitledBorder.border"),
I18N.getHtmlText("PanelTranslation.border.text"),
TitledBorder.LEADING, TitledBorder.TOP, null, null));
this.setBounds(360, 335, 305, 111);
this.setBackground(parent.getBackground());
// Enable translation
enableTranslation = new JCheckBox(
I18N.getHtmlText("PanelTranslation.enable.text"));
enableTranslation.setBounds(10, 20, 220, 20);
enableTranslation.setCursor(parent.getCursor());
enableTranslation.setBackground(parent.getBackground());
boolean savedTranslation = Boolean
.parseBoolean(parent.getPreferences().get("translation",
parent.getProperties().getProperty("translation")));
enableTranslation.setSelected(savedTranslation);
final Preferences preferences = this.parent.getPreferences();
enableTranslation.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
String key = preferences.get("googleTranslateKey", "");
if (key != null && !key.equals("")) {
switchLang(getEnableTranslation().isSelected());
} else {
log.trace("Key for Google Translate service not defined");
openKeyDialog(key);
}
}
});
this.add(enableTranslation);
// Languages
JLabel fromLabel = new JLabel(
I18N.getHtmlText("PanelTranslation.from.text"));
fromLabel.setBounds(10, 45, 55, 20);
this.add(fromLabel);
fromComboBox = new JComboBox<LangItem>();
fromComboBox.setBounds(65, 45, 95, 20);
fromComboBox.setCursor(parent.getCursor());
this.add(fromComboBox);
String savedLangFrom = parent.getPreferences().get("langFrom",
parent.getProperties().getProperty("langFrom"));
String savedLangTo = parent.getPreferences().get("langTo",
parent.getProperties().getProperty("langTo"));
LangItem langFrom = null, langTo = null, item = null;
String[] languages = parent.getProperties().getProperty("languages")
.split(",");
Vector<LangItem> langVector = new Vector<LangItem>();
for (String s : languages) {
item = new LangItem(s, I18N.getHtmlText(
"PanelTranslation." + s.toLowerCase() + ".text"));
langVector.add(item);
if (s.equals(savedLangFrom)) {
langFrom = item;
} else if (s.equals(savedLangTo)) {
langTo = item;
}
}
Collections.sort(langVector);
fromComboBox.setModel(new DefaultComboBoxModel<LangItem>(langVector));
if (langFrom != null) {
fromComboBox.setSelectedItem(langFrom);
}
JLabel toLabel = new JLabel(
I18N.getHtmlText("PanelTranslation.to.text"));
toLabel.setBounds(160, 45, 40, 20);
this.add(toLabel);
toComboBox = new JComboBox<LangItem>();
toComboBox.setBounds(200, 45, 95, 20);
toComboBox.setCursor(parent.getCursor());
this.add(toComboBox);
toComboBox.setModel(new DefaultComboBoxModel<LangItem>(langVector));
if (langTo != null) {
toComboBox.setSelectedItem(langTo);
}
// Output
JLabel separatorLabel = new JLabel(
I18N.getHtmlText("PanelTranslation.output.text"));
separatorLabel.setBounds(10, 73, 70, 20);
this.add(separatorLabel);
boolean savedMergeTranslation = Boolean.parseBoolean(
parent.getPreferences().get("mergeTranslation", parent
.getProperties().getProperty("mergeTranslation")));
rdbtnMerged = new JRadioButton(
I18N.getHtmlText("PanelTranslation.merged.text"));
rdbtnMerged.setBounds(80, 68, 150, 20);
rdbtnMerged.setCursor(parent.getCursor());
rdbtnMerged.setBackground(parent.getBackground());
rdbtnMerged.setSelected(savedMergeTranslation);
rdbtnMerged.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
switchButtonText(getEnableTranslation().isSelected());
}
});
this.add(rdbtnMerged);
rdbtnTranslated = new JRadioButton(
I18N.getHtmlText("PanelTranslation.just.text"));
rdbtnTranslated.setBounds(80, 85, 150, 20);
rdbtnTranslated.setCursor(parent.getCursor());
rdbtnTranslated.setBackground(parent.getBackground());
rdbtnTranslated.setSelected(!savedMergeTranslation);
rdbtnTranslated.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
switchButtonText(getEnableTranslation().isSelected());
}
});
this.add(rdbtnTranslated);
ButtonGroup groupExtension = new ButtonGroup();
groupExtension.add(rdbtnMerged);
groupExtension.add(rdbtnTranslated);
String key = parent.getPreferences().get("googleTranslateKey", "");
boolean keyWithValue = key != null && !key.equals("");
switchLang(getEnableTranslation().isSelected() & keyWithValue);
// Help
JButton buttonHelpSub = new JButton(
new ImageIcon(ClassLoader.getSystemResource("img/help.png")));
buttonHelpSub.setBounds(273, 80, 22, 22);
buttonHelpSub.setCursor(parent.getCursor());
buttonHelpSub.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
HelpTranslationDialog helpTranslationDialog = parent
.getHelpTranslation();
if (helpTranslationDialog == null) {
helpTranslationDialog = new HelpTranslationDialog(parent,
true);
}
helpTranslationDialog.setVisible();
}
});
this.add(buttonHelpSub);
// Lock
JButton buttonLock = new JButton(
new ImageIcon(ClassLoader.getSystemResource("img/lock.gif")));
buttonLock.setBounds(273, 15, 22, 22);
buttonLock.setCursor(parent.getCursor());
buttonLock.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String key = preferences.get("googleTranslateKey", "");
openKeyDialog(key);
}
});
this.add(buttonLock);
// Borders (for debug purposes)
if (log.isTraceEnabled()) {
Border border = BorderFactory.createLineBorder(Color.black);
fromLabel.setBorder(border);
toLabel.setBorder(border);
separatorLabel.setBorder(border);
enableTranslation.setBorderPainted(true);
rdbtnMerged.setBorderPainted(true);
rdbtnTranslated.setBorderPainted(true);
}
}
private void openKeyDialog(String key) {
KeyTranslationDialog keyTranslationDialog = parent
.getKeyTranslationDialog();
if (keyTranslationDialog == null) {
keyTranslationDialog = new KeyTranslationDialog(parent, true, key);
}
keyTranslationDialog.setKey(key);
keyTranslationDialog.setVisible();
}
public void updateLang() {
// Read key to check if has changed by user
String key = parent.getPreferences().get("googleTranslateKey", "");
if (key != null && !key.equals("")) {
log.trace("Key for Google Translate service: {}", key);
switchLang(true);
} else {
switchLang(false);
}
}
public JCheckBox getEnableTranslation() {
return enableTranslation;
}
public JComboBox<LangItem> getFromComboBox() {
return fromComboBox;
}
public JComboBox<LangItem> getToComboBox() {
return toComboBox;
}
public JRadioButton getRdbtnMerged() {
return rdbtnMerged;
}
public JRadioButton getRdbtnTranslated() {
return rdbtnTranslated;
}
private void switchLang(boolean enable) {
enableTranslation.setSelected(enable);
getFromComboBox().setEnabled(enable);
getToComboBox().setEnabled(enable);
getRdbtnMerged().setEnabled(enable);
getRdbtnTranslated().setEnabled(enable);
switchButtonText(enable);
}
private void switchButtonText(boolean enable) {
if (enable) {
if (rdbtnTranslated.isSelected()) {
parent.getMergeButton().setText(
I18N.getHtmlText("Window.translateButton.text"));
} else {
parent.getMergeButton().setText(
I18N.getHtmlText("Window.mergeTranslateButton.text"));
}
} else {
parent.getMergeButton()
.setText(I18N.getHtmlText("Window.mergeButton.text"));
}
}
}